std::bad_weak_ptr 对象构造后 shared_from_this 中的异常

std::bad_weak_ptr exception in shared_from_this after object construction

我有一个 class 定义类似于以下内容:

class A : std::enable_shared_from_this<A> {
public: 
  static std::shared_ptr<A> create() {
    return std::shared_ptr<A>(new A());
  }

  void f() { 
    shared_from_this();
  }

private:
  A() { }
};

它的用法类似于:

std::shared_ptr<A> pt = A::create();
pt->f();

尽管在创建 shared_ptr pt 之后调用 shared_from_this(),但对 f() 的调用仍然会导致 bad_weak_ptr抛出异常。 运行 它在 gdb 中确认异常是在对 f() 的调用中抛出的,而不是在我未包含在此处的一些由讲师调用的代码中抛出的。

std::enable_shared_from_this<A> 必须是 public 基础。当 shared_ptr 构造函数发现您从 enable_shared_from_this 派生时,它会在 enable_shared_from_this 对象中存储自身的弱副本。如果继承不是public,则不会出现这种情况,enable_shared_from_this中存储的weak_ptr将为null,导致shared_from_this之后出现bad_weak_ptr异常尝试从中构造一个 shared_ptr

Public 这里需要继承。因为它是 class A ,所以它不是默认值。看到异常的原因也是如此/ bad_weak_ptr.