shared_ptr,shared_ptr,enable_shared_from_this的理解

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

转载于:https://www.cnblogs.com/bluebbc/p/5198462.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值