enable_shared_from_this的作用
C++ 中,std::enable_shared_from_this
类模板和shared_from_this
成员函数主要用于在一个类的成员函数中安全地获取指向自身的std::shared_ptr
。它们的作用更多是为了确保资源正确管理。
当一个对象被多个std::shared_ptr
管理时,如果在对象内部的成员函数中直接创建新的std::shared_ptr
指向自身(也就是this
),可能会导致多个独立的引用计数,从而无法正确管理对象的生命周期。而使用shared_from_this
可以确保所有指向该对象的std::shared_ptr
共享同一个引用计数,从而正确管理对象的生命周期。
例如:
1 |
|
print
函数中使用shared_from_this
获取指向自身的std::shared_ptr
,确保了与外部创建的std::shared_ptr
共享同一个引用计数。
如果在对象内部的成员函数中直接返回一个指向自身的普通指针,当外部的std::shared_ptr
被销毁后,这个普通指针就会变成悬空指针。而使用shared_from_this
可以避免这种情况,因为它返回的std::shared_ptr
会在引用计数为零时自动释放对象所占用的内存。例如这里不使用enable_shared_from_this
和shared_from_this
,则对象会多次释放,导致程序出错。
代码及其执行结果可参见:这里