2011-02-26 33 views
3
class Object { }; 
Class Derived : public Object { }; 

boost::shared_ptr<Object> mObject(new Derived); // Ok 

但如何将其投射到boost::shared_ptr<Derived>共享ptr铸造

我试过类似:static_cast< boost::shared_ptr<Derived> >(mObject),它失败了。

唯一的工作思路是:

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

+0

的可能重复[用升压:: shared_ptr的的static_cast?](http://stackoverflow.com/questions/624854/static-cast-with-boostshared-ptr) – 2011-02-26 11:14:09

回答

12

投的结果,不传递到一个新的shared_ptr的构造。这将导致两个shared_ptrs认为他们拥有该对象,并且都会尝试删除它。结果将是一个双免费的,并可能崩溃。

shared_ptr有cast functions专门为此。

+0

'shared_ptr's没有,就凭“拥有“任何东西。但是,你是对的暗示每个'shared_ptr'不会意识到,其他具有所有权要求的份额。 – 2011-02-26 14:01:50

0

您可以尝试

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

boost::shared_ptr<Object> mObject = new Derived; // OK 
boost::shared_ptr<Derived> mDerived = 
    boost::static_pointer_cast<Derived, Object>(mObject); // OK 

升压有相应的模板,以满足标准蒙上C++定义。