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共享同一个引用计数,从而正确管理对象的生命周期。
例如:
| |
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,则对象会多次释放,导致程序出错。
代码及其执行结果可参见:这里