Yoc*_*mer 3 c++ boost shared-ptr
我有一个派生自enable_shared_from_this... 的类(最近被添加到Boost的std中)
class Blah : public std::enable_shared_from_this<Blah>
{
};
Run Code Online (Sandbox Code Playgroud)
我知道我应该从这样的实例创建共享指针:
Blah* b = new Blah();
std::shared_ptr<Blah> good(b->shared_from_this());
Run Code Online (Sandbox Code Playgroud)
问题是,如果我做这样的事情,是否会隐含地使用对象的weak_ptr:
std::shared_ptr<Blah> bad(new Blah());
Run Code Online (Sandbox Code Playgroud)
或者它只是创建一个单独的共享指针计数器?(我怀疑)
Blah* b = new Blah();
std::shared_ptr<Blah> good(b->shared_from_this()); // bad, *b is not yet owned
Run Code Online (Sandbox Code Playgroud)
这是不正确的.为了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
Run Code Online (Sandbox Code Playgroud)
当然,在这个简单的例子中,它更容易使用:
std::shared_ptr<Blah> good(b);
Run Code Online (Sandbox Code Playgroud)
没有任何内在错误:
std::shared_ptr<Blah> bad(new Blah());
Run Code Online (Sandbox Code Playgroud)
因为new B()创建新的,B所以对于新创建的B对象,不存在其他单独的共享指针计数.
| 归档时间: |
|
| 查看次数: |
3868 次 |
| 最近记录: |