unique_ptr

unique_ptr提供的语义是独占资源,支持下列操作:

函数作用
unique_ptr up默认构造函数,up为空
unique_ptr up(ptr)构造函数,指定资源
unique_ptr up(ptr, del)构造函数,指定资源和deleter
unique_ptr up(move(up2))移动语义构造函数,up2是一个unique_ptr对象,up2的资源所有权转移到up
unique_ptr up(move(ap))移动语义构造函数,ap是一个auto_ptr对象
up = move(up2)移动语义赋值操作符,up原有资源被释放,up2的资源所有权转移到up
up = nullptr释放资源,up变为空
up1.swap(up2)交换 pointer 和 deleter
swap(up1, up2)交换 pointer 和 deleter
up.reset()释放资源,up变为空
up.reset(ptr)释放原有资源,引用新的资源
up.release()放弃资源所有权,并返回资源对象
up.get()返回 pointer
*up针对非数组资源,返回资源对象
up->针对非数组资源,访问资源对象的成员
up[]针对数组资源,提供随机读写
if (up)判断 up 是否为空
==、!=、<、<=、>、>=比较pointer
up.get_deleter()返回deleter

独占语义

unique_ptr提供独占语义,但这需要使用者提供保证,代码中不能出现多个unique_ptr同时引用同一个资源:

string *str = new string("unique_ptr");
unique_ptr<string> up1(str);
unique_ptr<string> up2(str);

上面的代码会引起运行期错误。所以,unique_ptr没有提供普通的拷贝构造函数和赋值操作符,只提供了移动语义的拷贝构造函数和赋值操作符。

针对数组的偏特化

unique_ptr有一个针对数组的偏特化,该偏特化提供了针对数组的下标操作符[],相对的删除了 * 和 -> 操作符。另外,该版本在释放资源时对指针执行 delete[]。所以,可以不用提供特定的deleter:

unique_ptr<string[]> up(new string[10]{"hello"});
cout << up[0] << endl;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值