c++11 之 enable_shared_from_this
enable_shared_from_this 是一个模板类
1 | template< class T > class enable_shared_from_this; |
std::enable_shared_from_this
能让一个对象(假设名为 t,且被一个 std::shared_ptr 对象 pt 管理)安全地生成其他额外的 std::shared_ptr 实例,他们与 pt 共享对象 t 的所有权
若一个类 T 继承 std::enable_shared_from_this<T>
,则会为该类提供成员函数:shared_from_this。当 T 类型对象 t 被一个名为 pt 的 std::shared_ptr<T>
类对象管理时,调用 T::shared_from_this
成员函数,将会返回一个新的 std::shared_ptr<T>
对象,他与 pt 共享 t 的所有权。
例子
1 | class B : public std::enable_shared_from_this<B> { |
使用场景
当类A 被 shared_ptr 管理,且在类A 的成员函数中需要把当前类对象作为参数传给其他函数时,就需要传递一个指向自身的 shared_ptr。
为什么不直接传递 this 指针?
使用智能指针的初衷是为了方便资源管理,如果智能指针和原始指针混用,很容易破坏智能指针的语义,从而产生问题
可以直接传递
shared_ptr<this>
吗?不能,这样会导致两个非共享的 shared_ptr 指向同一个对象,未增加引用计数导致对象被析构两次。