是否可以删除对自身的shared_ptr引用

时间:2015-02-19 06:16:10

标签: c++ shared-ptr

在方法中删除对自身的唯一shared_ptr引用是否安全?像下面这样的东西。如果两个对象(A类和B类中的另一个)通过pB_pA_指向对方。假设pB_是对B类对象的唯一引用。然后我在类A::method()的对象上调用A。会有问题吗?

#include <iostream>
using std::shared_ptr

class B;
class A {
 public:
  void method() {
    pB_->method();
  }
  shared_ptr<B> pB_;
};

class B {
 public:
  void method() {
    pA_->pB_.reset();

    // Is this OK? And is it safe if I don't do this? 
    some_other_data_ = 10;
  }
  shared_ptr<A> pA_;

  int some_other_data_;
};

1 个答案:

答案 0 :(得分:1)

重置该指针将导致B对象被删除,所以不,在该点之后访问其中一个成员是不可行的。有关详细信息,请参阅:Is it safe to `delete this`?