C++智能指针干货

常见类型

类型出自说明
std::auto_ptrC++0x强调auto(自动delete对象),copy时转移ownership(易误解),现已deprecated.
std::shared_ptrC++11强调share(对象被多个owner共享),引用计数为0时delete对象.
std::weak_ptrC++11强调weak(不改变引用计数),可解决循环引用问题,须lock得到std::shared_ptr后使用.
std::unique_ptrC++11强调unique(只有一个owner),禁止copy,可以move,用于替代std::auto_ptr.
boost::shared_ptrboost类似std::shared_ptr, 强调share特性.
boost::scoped_ptrboost类似std::unique_ptr, 强调scope(超出作用域时delete对象),禁止copy,不能move.
boost::weak_ptrboost类似std::weak_ptr, 强调weak引用特性.
android::spandroidsp(strong pointer), 类似std::shared_ptr.
android::wpandroidwp(weak pointer),类似std::weak_ptr,须promote成android::sp后使用.

几点说明

1) 除上表列出的常见类型外,很多开源库(如Qt, Webkit, OpenCV等)都实现了满足自身需求的智能针指类型。
2)大多智能指针通过 “类 + 模板 + 引用计数” 来实现;通过重载操作符来模拟普通指针。
3)“weak”指针的引入主要是为了解决循环引用问题。
4)某些智能指针内部可能有多种引用计数。如android::sp的实现中有“weak”和“strong”两种引用计数。
5)考虑到多线程访问,智能指针引用计数的修改大多采用原子操作。
6)引用计数的变化规律:构造时加1,析构时减1,拷贝时一个加1,另一个减1。
7)引用计数本身需要存储,智能指针比普通指针多了引用计数的存储开销。
8)通常,引用计数所占的内存,在对象第1次被引用时分配,在对象析构(引用计数为0时,对象被delete)后释放。
9) 某些实现提供这样一个方法:分配内象内存和分配引用计数内存一步搞定。如std::make_shared。
10)善用智能指针可写出简单、安全、且不易出错的高质量代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值