C++ unique_ptr概述 常用操作

unique_ptr概述

uniue_ptr是一个独占式的指针,同一个时刻, 就只能有一个unique_ptr指向这个对象(内存),unique_ptr的使用格式

unique_ptr<Class_Tyep> P_Name;
unique_ptr的常规初始化:
unique_ptr<int> p; 创建一个空的智能指针
unique_ptr<int> pi(new int);
  • make_unique函数
    make_unique函数是在C++14中引入的,使用了make_unique函数之后不能指定删除器, 如果不需要使用删除器, 尽量使用make_unique函数,他的效率高
	unique_ptr<int> p = make_unique<int>(100);
	auto p2 = make_unique<string>("C++");

unique_ptr常用操作

  • unique_ptr的初始化和赋值
	unique_ptr<int> p1 = make_unique<int>(100);
	unique_ptr<int> p2(new int(200));

//	unique_ptr<int> p3(p1); 不支持定义时初始化
//  p1 = p2; 不支持赋值操作

	// 支持移动语义
	unique_ptr<int> p3 = std::move(p2); // 移动过后, p2为空, p3指向原来p2指向的对象.
  • release
    release(): 放弃对指针的控制权, 切断了智能指针和其所指向的对象的联系
    他会返回一个裸指针, 可以将返回的这个裸指针手工delete释放, 也可以用来初始化另外一个智能指针.
	unique_ptr<int> p1(new int(100));
	unique_ptr<int> p2(p1.release());
    // delete p1.release();
	if (p1 == nullptr) cout << "ha ha" << endl;
	cout << *p2 << endl;
  • reset()
    reset不带参数: 释放智能指针指向的对象, 将智能指针置空
	unique_ptr<string> pstr(new string("C++"));
	pstr.reset();
	if (pstr == nullptr) cout << "指针为空" << endl;

reset带参数, 释放智能指针指向的对象, 并让该智能指针指向新的对象

	unique_ptr<string> pstr(new string("C++"));
	//pstr.reset();
	//if (pstr == nullptr) cout << "指针为空" << endl;
	unique_ptr<string> pstr1(new string("Java"));
	pstr.reset(pstr1.release());
	cout << *pstr << endl;
  • = nullptr
    = nullptr释放智能指针指向的对象, 并将智能指针置空
	unique_ptr<int> ps1(new int(200));
	ps1 = nullptr;
  • 指向一个数组
unique_ptr<int[]> p(new int[10]());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值