如果我基于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
,否则对象永远不会被销毁。