如果我根据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>();
}
答案 0 :(得分:4)
即使在修复语法错误后,这也无效:shared_from_this
要求至少有一个拥有shared_ptr
的{{1}}实例。在初始化期间,没有*this
拥有它。
您可能会收到异常,空共享指针或其他一些未定义的行为。
如果您稍后设置shared_ptr
,一旦sharedThisPtr
拥有它,那么它将像任何其他共享指针一样,只要它共享对象的所有权就可以防止破坏。因此,在这种情况下,除非您重置myObj
,否则永远不会销毁该对象。