static_cast с boost :: shared_ptr?
-
05-07-2019 - |
Вопрос
Что эквивалентно 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 = ???
Решение
Используйте 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 вашего компилятора).
В качестве комментария: если Derived на самом деле является производным от Base, то вам следует использовать dynamic_pointer_cast вместо статических приведений. Система будет иметь возможность определить, когда / если ваш актерский состав неправильный.
Стоит отметить, что существует разница в количестве операторов приведения, предоставляемых Boost и реализациями TR1. Р>
TR1 не определяет третий оператор const_pointer_cast ()