我有一个派生自 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/