enable_shread_from_this 的作用就是解决这个问题,示例代码如下: class C: public std::enable_shared_from_this<C>{public:C() {m_age = new int(10);std::cout << "C()" << std::endl;}~C() {std::cout << "~C()" << std::endl;if (m_age){delete m_age;m_age = nullptr;}}st...
enable_shared_from_this<T>类中定义了一个weak_ptr<T>,起到了上文提到的从obj指针生成shared_ptr<T>对象的作用. 按照先前的原理, 我们可能认为是在obj初始化的时候, 同时对weak_this进行初始化, 但是在这段代码里显然没有对weak_this进行任何初始化工作(原始代码里也没有, gcc为什么不这样实现呢? 这是因为...
1template<classX,classY,classT > inlinevoidsp_enable_shared_from_this( boost::shared_ptr<X>const* ppx, Yconst* py, boost::enable_shared_from_this< T >const*pe )2{3if( pe !=0)4{5pe->_internal_accept_owner( ppx, const_cast< Y* >( py ) );6}7} 1inlinevoidsp_enable_shared_...
使用enable_shared_from_this来修正这个问题 #include<memory>#include<iostream>classTest:publicstd::enable_shared_from_this<Test>{public:std::shared_ptr<Test>getptr(){returnshared_from_this();}~Test(){std::cout<<"Test::~Test() called"<<std::endl;}};intmain(){std::shared_ptr<Test>a(n...
enable_shared_from_this类位于标准库的中,当一个类T公有继承它,如 复制代码 classT:public enable_shared_from_this<T>{}; 类T会继承到一个公有方法 复制代码 shared_ptr<T>shared_from_this(); 要在T类中使用该函数,是继承enable_shared_from_this类的唯一目标。