使用场合:当类A被share_ptr管理,且在类A的成员函数里需要把当前类对象作为参数传给其他函数时,就需要传递一个指向自身的share_ptr。 我们就使类A继承enable_share_from_this,然后通过其成员函数share_from_this()返回当指向自身的share_ptr。 以上有2个疑惑: 1.把当前类对象作为参数传给其他函数时,为什么要传递...
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为什么不这样实现呢? 这是因为...
c++ std::enable_shared_from_this 的作用 在类的内部获取shared_ptr是在所难免的。 举个例子: 在日常c++编程中,为了更好的管理资源,我们通常借助shared_ptr来达到对资源的自动管理。由于其原理是通过过跟踪引用计数实现的,也就是说在使用了shared_ptr后就不能再使用裸指针this。比如说在类的内部直接使用std::s...
ptr对象对象和原有的shared_ptr共用一个控制块,达到共享对象所有权,共同管理对象的生命周期的作用。
所以继承 std::enable_shared_from_this 的类有一层隐含的意思,那就是当前类必须通过shared_ptr使用,...
另外说一句 你举的例子 毫无实际价值 shared_from_this不是这样玩的.shared_ptr<Y> p(new Y); ...
}// _M_assign()的作用是为指针赋地址和引用计数(当然引用计数对weak_ptr没什么意义)// 所以,_M_weak_assign这个会在智能指针构造时会被调用的函数,是为了为从enable_shared_from_this中继承得来的_M_weak_this赋地址! 通过上面的分析,可以得出一个结论,这样的代码是错误的: ...
1.1.1 作用 安全生成共享指针:shared_from_this 允许一个对象安全地生成自身的 std::shared_ptr,而不会创建新的控制块(reference counting block)。 避免悬垂指针:当与 std::shared_ptr 一起使用时,可以防止对象在其成员函数执行期间被意外销毁。 便于访问对象本身:在对象的成员函数中,可以方便地获取对象自身的 ...
原因是两个shared_ptr不能管理同一块内存,例如 int* p = new int(100); std::shared_ptr<i...