共享ptr铸造

Max*_*rai 3 c++ boost casting shared-ptr

class Object { };
Class Derived : public Object { };

boost::shared_ptr<Object> mObject(new Derived); // Ok
Run Code Online (Sandbox Code Playgroud)

但是如何把它投到boost::shared_ptr<Derived>

我尝试了类似的东西:static_cast< boost::shared_ptr<Derived> >(mObject)它失败了.

唯一的工作理念是:

boost::shared_ptr<Derived> res(new dynamic_cast<Derived*>(mObject.get()))

bdo*_*lan 12

不要将强制转换的结果传递给新的shared_ptr构造函数.这将导致两个shared_ptrs认为他们拥有该对象,并且两者都会尝试删除它.结果将是双重免费,并且可能是崩溃.

shared_ptr 专门为此设置了强制转换函数.