您的位置:首页 > 其它

shared_ptr,shared_ptr,enable_shared_from_this的理解

2016-02-18 15:58 302 查看
0.shared_ptr和weak_ptr的实现方案
说明:该方案完全是我自己YY出来的,是为了方便自己的理解智能指针的。另外,也帮助理解enable_shared_from_this。

1.背景
为了方便管理动态分配的内存,让申请的内存自动释放,天才们提出了智能指针的方法。
既然你创造了一种新的技术,老的问题必将以新的形态出现。
这里我指关注一个问题:

如何使用智能指针?
1.1 基本使用(shared_ptr)
1.2 监控使用(shared_ptr)
1.3 内部使用(enable_shared_from_this)


2.实现

shared_ptr(每个都包含有指向Counter的指针)
Counter(包含shared_ptr和weak_ptr分别的计数,还包含“内存指针”)
weak_ptr(每个都包含有指向Counter的指针)
enable_shared_from_this(继承该类的子类对象都包含了一个weak_ptr)

2.1 shared_ptr

只有第一个shared_ptr才生成一个Counter,并将内存指针放到Counter中,shared_ptr计数+1 。

之后又新的针对该内存指针的shared_ptr,都必须拷贝的方式获得指向Counter的指针,并且shared_ptr计数+1 。

每销毁一个shared_ptr的时候,Counter的shared_ptr计数-1,当shared_ptr计数为0时,销毁内存

当shared_ptr计数和weak_ptr计数同时为0时,销毁Counter

2.2 weak_ptr

当shared_ptr计数>0的时候,可以通过weak_ptr获得一个shared_ptr,当然shared_ptr计数+1 。

没销毁一个weak_ptr的时候,weak_ptr计数-1,

当shared_ptr计数和weak_ptr计数同时为0时,销毁Counter

2.3 Counter

存放了shared_ptr和weak_ptr计数

存放了 内存指针

2.4 enable_shared_from_this

当继承该类的子类对象指针构造shared_ptr的时候,该对象可以获得一个weak_ptr

当该子类对象需要传递自身指针给其他人使用的时候,必须传递一个shared_ptr
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: