2011-02-26 31 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++定義。