智能指针的再巩固——unique_ptr

概述
C++11中的新引进的智能指针做到了手动申请资源,由系统释放资源的垃圾回收机制,为了能跟上时代的潮流,新的C++标准一定是要不断学习的,这次我们再强化一下unique_ptr,share_ptr和weak_ptr的使用。
unique_ptr
unique_ptr是auto_ptr的升级版,有了移动语义,也就是std::move();取消了对于拷贝语义的支持,在auto_ptr中,存在拷贝语义导致原对象直接失效,成为空指针,这样在后续的遍历过程出错。
上次提到unique_ptr把拷贝语义和移动语义记反了,面试官提醒我是否知道移动语义,后来才说到unique_ptr有移动语义但是没能明确说unique没有拷贝语义,这个是一个很大的扣分点,正是因为auto有拷贝没有移动,所以会有资源被提前释放的问题,unique取消了拷贝添加了移动这才是unique比起auto安全的地方。
以下是例子:

unique_ptr<string> upt(new string("Hello"));
unique_ptr<string> upt1(upt);	//编译出错,已禁止拷贝
unique_ptr<string> upt1=upt;	//编译出错,已禁止拷贝
unique_ptr<string> upt1=std::move(upt);  //控制权限转移

auto_ptr<string> apt(new string("Hello"));
auto_ptr<string> apt1(apt);	//编译通过
auto_ptr<string> apt1=apt;	//编
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值