对enable_shared_from_this、weak_ptr、shared_ptr的理解

关于这两个smart_ptr,网上search一把都能够找到一大堆使用介绍,

但欠缺的是对源码的分析,

的确,boost的代码不好看懂,scoped_ptr还好,比较简单,依赖也少,

但如果看shared_ptr和weak_ptr就麻烦了,里面的东西本来就多,还依赖的很(weak_ptr本来就依赖shared_ptr)。

重要的是,我对weak_ptr非常感兴趣,

《超越C++标准库:Boost库导引》对他的应用总结如下:

 

对于以下情形使用 weak_ptr

  • 要打破递归的依赖关系

  • 使用一个共享的资源而不需要共享所有权

  • 避免悬空的指针

前两点还好理解,但最后一点,weak_ptr是如何做到避免悬空指针(野指针)的?

 

既然网上没有介绍,只好看代码了,毕竟代码骗不了人。

但boost的代码那个难看明白啊,泛型编程的东西确实够磨人的,

反正我是问个究竟,所以能跳过的就跳过,只找重心,看了一晚后大概看明白了。

 

下面简单说说:

1 weak_ptr和shared_ptr是相关的,因为weak_ptr共享了shared_ptr的共享成员指针。

2 这个共享的成员指针,包括了两个整数,一个是use_count_,一个是weak_count_,区别对待。

3 既然一份指针带着两个整数,那任一个整数归零了,指针当然还能够判断出来的(weak_ptr能操作这个共享成员指针,而判断shared_ptr是否引用归零了,判断use_cout_就足够了,这不是难事。)。

 

 

相关的代码后面再补充说明吧,但还是建议看代码更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值