设为首页 加入收藏

TOP

1.6 神器shared_ptr/weak_ptr
2013-10-07 16:00:49 来源: 作者: 【 】 浏览:58
Tags:1.6 神器 shared_ptr/weak_ptr

1.6 神器shared_ptr/weak_ptr

shared_ptr 是引用计数型智能指针,在Boost 和std::tr1 里均提供,也被纳入C++(www.cppentry.com)11 标准库,现代主流的C++(www.cppentry.com) 编译器都能很好地支持。shared_ptr<T> 是一个类模板(class template),它只有一个类型参数,使用起来很方便。引用计数是自动化资源管理的常用手法,当引用计数降为0 时,对象(资源)即被销毁。weak_ptr 也是一个引用计数型智能指针,但是它不增加对象的引用次数,即弱(weak)引用。

shared_ptr 的基本用法和语意请参考手册或教程,本书从略。谈几个关键点。

shared_ptr 控制对象的生命期。shared_ptr 是强引用(想象成用铁丝绑住堆上的对象),只要有一个指向x 对象的shared_ptr 存在,该x 对象就不会析构。

当指向对象x 的最后一个shared_ptr 析构或reset() 的时候,x 保证会被销毁。

weak_ptr 不控制对象的生命期,但是它知道对象是否还活着(想象成用棉线轻轻拴住堆上的对象)。如果对象还活着,那么它可以提升(promote)为有效的shared_ptr;如果对象已经死了,提升会失败,返回一个空的shared_ptr。“提升/lock()”行为是线程安全的。

shared_ptr/weak_ptr 的“计数”在主流平台上是原子操作,没有用锁,性能不俗。

shared_ptr/weak_ptr 的线程安全级别与std::string 和STL 容器一样,后面还会讲。

孟岩在《垃圾收集机制批判》8 中一针见血地点出智能指针的优势:“C++(www.cppentry.com) 利用智能指针达成的效果是:一旦某对象不再被引用,系统刻不容缓,立刻回收内存。这通常发生在关键任务完成后的清理(clean up)时期,不会影响关键任务的实时性,同时,内存里所有的对象都是有用的,绝对没有垃圾空占内存。”

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.5 原始指针有何不妥(2) 下一篇1.7 插曲:系统地避免各种指针错误

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 安装及连接-腾 (2025-12-25 06:20:28)
·MySQL的下载、安装、 (2025-12-25 06:20:26)
·MySQL 中文网:探索 (2025-12-25 06:20:23)
·Shell脚本:Linux Sh (2025-12-25 05:50:11)
·VMware虚拟机安装Lin (2025-12-25 05:50:08)