关于boost的shared_ptr以及weak_ptr的研究
来源:互联网 发布:软件测试知识点 编辑:程序博客网 时间:2024/09/21 08:17
boost的智能引用计数指针shared_ptr,其当引用计数为0,就会执行delete p;删除堆中分配的对象。
另外由于众所周知的引用计数循环导致内存泄漏的问题,可以考虑采用weak_ptr。
weak_ptr可以防止循环引用导致内存泄漏,内部实现采用啦shared_ptr不同的引用计数(但实际上都是指向同一个内部实现类sp_counted_base)。如果想从weak_ptr访问指针,可以调用lock方法,这时增加引用计数,返回对应shared_ptr。
这张图从别人文章copy过来的,能够较好看清楚各个类之间的关系。
简单介绍:
class sp_counted_base//负责不同平台的INTERLOCKED_INCREMENT/INTERLOCKED_DECREMENT
:
use_count_( 1 ), weak_count_( 1 )
//use_count是shared引用计数
//weak_count是weak引用计数
||
class sp_counted_impl_p : public sp_counted_base
//重载new/delete操作符
//负责allocate/dellocate
||
class shared_count class weak_count
: :
sp_counted_base *pi <---------> sp_counted_base* pi
|| ||
class shared_ptr class weak_ptr
: :
T* p T* p
shared_count pn weak_count pn
对应代码网址:
http://www.boost.org/doc/libs/1_53_0/boost/smart_ptr/weak_ptr.hpp
http://www.boost.org/doc/libs/1_53_0/boost/smart_ptr/detail/shared_count.hpp
http://www.boost.org/doc/libs/1_53_0/boost/smart_ptr/detail/sp_counted_impl.hpp
http://www.boost.org/doc/libs/1_53_0/boost/smart_ptr/detail/sp_counted_base_w32.hpp
http://www.boost.org/doc/libs/1_53_0/boost/smart_ptr/shared_ptr.hpp
以后考虑增加对android framework实现的sp,wp的分析对比
- 关于boost的shared_ptr以及weak_ptr的研究
- 几种智能指针的比较(std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::weak_ptr)
- Boost 关于 shared_ptr 的学习心得
- boost之shared_ptr,weak_ptr计数
- Boost智能指针shared_ptr、weak_ptr
- 对enable_shared_from_this、weak_ptr、shared_ptr的理解
- Linux多线程服务器编程shared_ptr以及weak_ptr实现的弱回调以及对象池管理
- boost::shared_ptr 和 boost::weak_ptr 和 scoped_ptr
- weak_ptr和shared_ptr,以及什么时候用weak_ptr
- boost库的weak_ptr剖析
- std::shared_ptr 和 std::weak_ptr的用法以及引用计数的循环引用问题
- std::shared_ptr 和 std::weak_ptr的用法以及引用计数的循环引用问题
- std::shared_ptr 和 std::weak_ptr的用法以及引用计数的循环引用问题
- std::shared_ptr 和 std::weak_ptr的用法以及引用计数的循环引用问题
- boost 库的 shared_ptr
- boost::shared_ptr的使用方法
- boost::shared_ptr的使用方法
- boost shared_ptr的使用方法
- JDBC深度封装的工具类 (具有高度可重用性)
- uva 11235 - Frequent values(RMQ)
- error_log()函数
- navigationBar tintColor barTintColor 分别在iOS7和它之前的区别
- Symmetric Tree
- 关于boost的shared_ptr以及weak_ptr的研究
- BestCoder Round #6(1002)hdu4982(贪心)
- hadoop之伪分布搭建
- 如何设置状态栏字体颜色
- UVA 10909 - Lucky Number(树状数组)
- JDBC笔记整理
- ASP编程十大技巧(基础)(转)
- 数组 不支持 引用
- 图书管理系统开发研究