我有一个派生自 enable_shared_from_this 的类......(最近从 Boost 添加到 std)

class Blah : public std::enable_shared_from_this<Blah>
{

};

我知道我应该从这样的实例创建共享指针:
Blah* b = new Blah();
std::shared_ptr<Blah> good(b->shared_from_this());

问题是,如果我做这样的事情,它是否会隐式地采用对象的 weak_ptr :
std::shared_ptr<Blah> bad(new Blah());

或者它只是创建一个单独的共享指针计数器? (我怀疑)

最佳答案

Blah* b = new Blah();
std::shared_ptr<Blah> good(b->shared_from_this()); // bad, *b is not yet owned

这是不正确的。要使 shared_from_this 工作, b 必须已经由至少一个 shared_ptr 拥有。您必须使用:
std::shared_ptr<Blah> b = new B();
Blah* raw = b.get();
std::shared_ptr<Blah> good(raw->shared_from_this()); // OK because *raw is owned

当然,在这个简单的例子中它更容易使用:
std::shared_ptr<Blah> good(b);

没有本质上的错误:
std::shared_ptr<Blah> bad(new Blah());

因为 new B() 创建了一个新的 B,所以新创建的 B 对象不能存在其他单独的共享指针计数。

关于c++ - std::enable_shared_from_this ... 新的 shared_ptr 是否知道采用 shared_from_this()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6030503/

10-11 17:50