码迷,mamicode.com
首页 > 其他好文 > 详细

智能指针总结

时间:2018-03-04 18:09:20      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:operator   指针   控制   const   release   构造函数   unique   必须   exp   

auto_ptr:

  1. 构造函数使用explicit,必须显式地初始化,禁止隐式转换。
  2. auto_ptr将指针delete掉,可能重复释放,并且不能管理数组。
  3. 对于拷贝构造对原先的指针调用release()后创建原先指针的智能指针。所以在函数参数传递和返回时会出现问题。(同样不适用于容器)。
  4. auto_ptr强调了控制权的唯一性,而拷贝构造要调用release(),所以拷贝构造不带const。没有const就不能进行临时对象的拷贝构造,编译器通过找到operator重载将临时对象转换成auto_ptr_ref类型,再调用auto_ptrauto_ptr_ref<_Ty>_right)进行值传递,得到了auto_ptr构成的对象(通过临时对象)。

unique_ptr:

  1. 将拷贝构造与赋值私有
  2. 可以进行移动构造和移动赋值操作
  3. 定义了自己的删除器,所以可以管理数组。

shared_ptrweak_ptr:

  1. 增加了引用计数不再强调独占权
  2. 定义了删除器,可以管理数组。
  3. 为了防止交叉引用问题,使用weak_ptr(不增加引用计数,每次使用时提升来确保是否存在)
  4. 因为引用计数的存在必定要加锁,影响性能。

智能指针总结

标签:operator   指针   控制   const   release   构造函数   unique   必须   exp   

原文地址:https://www.cnblogs.com/zhangtiezi/p/8505129.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!