为什么在enable_shared_from_this()的用法中出现异常?

时间:2018-11-09 21:09:16

标签: c++ c++11 std

在下面的示例中,有些东西逃避了我。如果对调用它的对象有未完成的shared_ptr引用,为什么在使用shared_from_this时这会生成通常的weak_ptr异常?

class A : std::enable_shared_from_this<A> {
public:
    static std::shared_ptr<A> create() {
        return std::shared_ptr<A>(new A());
    }
    A() {}
    void setParent(const std::shared_ptr<A>& other) {}
    std::shared_ptr<A> keep() {
        auto o = A::create();
        o->setParent(shared_from_this());
        return o;
    }
};

int main() {
    std::shared_ptr<A> a = A::create();
    auto s = a->keep();
}

2 个答案:

答案 0 :(得分:3)

您需要从enable_shared_from_this公开继承,以便共享的ptr ctor可以看到它。

顺便说一句,由于这个原因,clang无法编译您的示例。

答案 1 :(得分:2)

enable_shared_from_this必须是A的明确且可访问的基,库才能正确处理内部弱指针。

您的继承是私有的(使用class关键字时的默认继承。)