是一种允许在对象内部,得到(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.csdn.net/u012442719/article/details/55000048
以下来自于boost library1.63.0,代码作了简化,
以下是图片,如果看不清楚,请使用ctrl+鼠标滚轮: