статический бросок с повышением:: общий ptr?
что эквивалентно static_cast
С boost::shared_ptr
?
другими словами, как мне переписать следующее
Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);
при использовании shared_ptr
?
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
4 ответа:
использовать
boost::static_pointer_cast
:boost::shared_ptr<Base> b(new Derived()); boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
есть три оператора приведения для интеллектуальных указателей:
static_pointer_cast
,dynamic_pointer_cast
иconst_pointer_cast
. Они либо в пространстве именboost
(предоставлен<boost/shared_ptr.hpp>
) или пространства именstd::tr1
(предоставляется либо Boost, либо реализацией TR1 вашего компилятора).