在下面的示例中,有些东西逃避了我。如果对调用它的对象有未完成的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();
}
答案 0 :(得分:3)
您需要从enable_shared_from_this
公开继承,以便共享的ptr ctor可以看到它。
顺便说一句,由于这个原因,clang无法编译您的示例。
答案 1 :(得分:2)
enable_shared_from_this
必须是A
的明确且可访问的基,库才能正确处理内部弱指针。
您的继承是私有的(使用class
关键字时的默认继承。)