enable_shared_from_this使您可以获取的有效shared_ptr实例this。
通过从类模板派生类enable_shared_from_this,您继承了一个shared_from_this将shared_ptr实例返回的方法this。
请注意,必须首先将对象创建为shared_ptr:
#include <memory> class A: public enable_shared_from_this<A> { }; A* ap1 =new A(); shared_ptr<A> ap2(ap1); // 首先准备指向该对象的共享指针并保持它! // 然后从对象本身获取指向该对象的共享指针 shared_ptr<A> ap3 = ap1->shared_from_this(); int c3 =ap3.use_count(); // = 2:指向同一对象
注意(2)您不能enable_shared_from_this在构造函数内部调用。
#include <memory> // enable_shared_from_this class Widget : public std::enable_shared_from_this< Widget > { public: void DoSomething() { std::shared_ptr< Widget > self = shared_from_this(); someEvent -> Register( self ); } private: ... }; int main() { ... auto w = std::make_shared< Widget >(); w -> DoSomething(); ... }
如果shared_from_this()在非拥有的对象上使用shared_ptr,例如本地自动对象或全局对象,则行为是不确定的。从C ++ 17开始,它抛出std::bad_alloc。
使用shared_from_this()从构造函数等同于使用它不是由拥有的对象shared_ptr,因为对象是由拥有shared_ptr构造函数返回后。