std::shared_ptr 代码:
#include <memory> class Test : public std::enable_shared_from_this<Test> { public: /* //error! Test() { shared_from_this(); } */ void print(){shared_from_this();} int id; }; int main() { std::shared_ptr<Test> ptest(new Test()); ptest->print(); /* //error! Test *ptest = new Test(); ptest->print(); */ }
std::enable_shared_from_this<T> 是一个模板类,其中有一个成员函数 shared_ptr<T> shared_from_this() {...} 其实现的过程其实类似于:
std::shared_ptr<T> pobj(new T()); std::weak_ptr<T> pwobj(ptest); std::shared_ptr<T> pobj(pwobj);
真实实现可以查看源码,即必须先有 std::shared_ptr<T> 对象产生,才会有 std::weak_ptr,再会有 std::shared_from_this()