在日常c++编程中,为了更好的管理资源,我们通常借助shared_ptr来达到对资源的自动管理。由于其原理是通过过跟踪引用计数实现的,也就是说在使用了shared_ptr后就不能再使用裸指针this。比如说在类的内部直接使用std::shared_ptr<XX>(this),就会导致智能指针失效。 常见的场景: 通过std::bind生成functor函数传递给其他...
enable_shared_from_this<T>类中定义了一个weak_ptr<T>,起到了上文提到的从obj指针生成shared_ptr<T>对象的作用. 按照先前的原理, 我们可能认为是在obj初始化的时候, 同时对weak_this进行初始化, 但是在这段代码里显然没有对weak_this进行任何初始化工作(原始代码里也没有, gcc为什么不这样实现呢? 这是因为...
里面又调用了 enable_shared_from_this 的 _internal_accept_owner : template<classX,classY>void_internal_accept_owner( shared_ptr<X>const* ppx, Y * py )const{if( weak_this_.expired() ) { weak_this_= shared_ptr<T>( *ppx, py ); } } 最后,在这里对enable_shared_from_this 的成员 weak...
std::enable_shared_from_this 是一个类模板,用来返回指向当前对象的shared_ptr智能指针。在说明它的作用前我们可以看一下如下代码: demo.cpp #include <memory>#include <iostream>class A{public:A() { std::cout << "A()" << std::endl; }~A() { std::cout << "~A()" << std::endl; }s...
}// _M_assign()的作用是为指针赋地址和引用计数(当然引用计数对weak_ptr没什么意义)// 所以,_M_weak_assign这个会在智能指针构造时会被调用的函数,是为了为从enable_shared_from_this中继承得来的_M_weak_this赋地址! 通过上面的分析,可以得出一个结论,这样的代码是错误的: ...