将enable_shared_from_t这个基类指针(this)存储在自身中

时间:2014-04-30 13:42:17

标签: c++ c++11 smart-pointers

如果我根据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>();
}

1 个答案:

答案 0 :(得分:4)

即使在修复语法错误后,这也无效:shared_from_this要求至少有一个拥有shared_ptr的{​​{1}}实例。在初始化期间,没有*this拥有它。

您可能会收到异常,空共享指针或其他一些未定义的行为。

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