将enable_shared_from_这个基于类的指针(this)存储在itelf中



如果我基于std::enable_shared_from_this创建新的类会怎么样。并将其shared_from_this()方法结果存储为成员std::shared_ptr:

class B : public std::enable_shared_from_this<B> {
    public: 
        B(){
           sharedThisPtr_ = shared_from_this();
        }
    private:
        std::shared_ptr<B> sharedThisPtr_;
    };

这样的类对象会被破坏和释放吗?

int main(void){
    auto myObj = std::make_shared<B>();
}

即使修复了语法错误,这也不会起作用:shared_from_this要求至少有一个shared_ptr实例拥有*this。在初始化过程中,没有shared_ptr拥有它。

您可能会得到一个异常、一个空的共享指针或其他未定义的行为。

如果稍后设置sharedThisPtr,一旦myObj拥有它,它就会像任何其他共享指针一样工作,只要它共享对象的所有权,就可以防止破坏。因此,在这种情况下,除非重置sharedThisPtr,否则对象永远不会被销毁。

相关内容

最新更新