可以删除shared_ptr对自身的引用吗

Is it OK to remove shared_ptr reference to itself

本文关键字:引用 ptr 删除 shared      更新时间:2023-10-16

在方法中删除对自身的唯一shared_ptr引用是否安全?类似以下内容。如果两个对象,一个是A类,另一个是B类,通过它们的pB_pA_相互指向。假设pB_是对类B的对象的唯一引用。然后我在类A的对象上调用A::method()。会有什么问题吗?

#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_;
};

重置该指针将导致B对象被删除,因此不允许,在该点之后访问其成员之一。有关详细信息,请参阅:"删除此项"安全吗?