c++ enable shared from this

本文介绍了如何正确使用C++中的std::enable_shared_from_this来配合std::shared_ptr管理对象生命周期。文章强调了几个关键点:构造函数中不可使用shared_from_this(), 对象直接在栈或堆上构建时也不能使用此方法,以及为了安全地使用shared_from_this(),对象从创建开始就必须由shared_ptr管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

是一种允许在对象内部,得到(shared_ptr自身)的方法。有几点需要注意:

对于:
class MyClass :public enable_shared_from_this< MyClass>{……};
总结:
1,不可以在MyClass的构造函数中使用shared_from_this(),因为父类的弱针指成员还没有被初始化。
2,对象直接在栈上或堆上构建,也是不能使用shared_from_this()的,因为常规的构造,不会初始化-父类的弱指针,原理同上。
3,如果要安全使用shared_from_this(),对象生存至始至终必须由shared_ptr管理,第一个shared_ptr将负责初始化那个父类的弱指针。花了一下午的时间才搞清楚,
4,使用shared_from_this()得到的智能指针,显然不是这个对象的第一个智能指针。
用到的技术c++SFINAE:http://blog.youkuaiyun.com/u012442719/article/details/55000048
以下来自于boost library1.63.0,代码作了简化,
以下是图片,如果看不清楚,请使用ctrl+鼠标滚轮:

这里写图片描述
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值