static_cast с boost :: shared_ptr? - PullRequest
       24

static_cast с boost :: shared_ptr?

72 голосов
/ 09 марта 2009

Что эквивалентно 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 ]

105 голосов
/ 09 марта 2009

Использование boost::static_pointer_cast:

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
22 голосов
/ 09 марта 2009

Для интеллектуальных указателей есть три оператора приведения: static_pointer_cast, dynamic_pointer_cast и const_pointer_cast. Они либо в пространстве имен boost (предоставляется <boost/shared_ptr.hpp>), либо в пространстве имен std::tr1 (предоставляется Boost или реализацией TR1 вашего компилятора).

3 голосов
/ 09 марта 2009

В качестве комментария: если Derived на самом деле является производным от Base, то вам следует использовать dynamic_pointer_cast, а не статическое приведение. Система будет иметь возможность определить, когда / если ваш актерский состав неправильный.

2 голосов
/ 16 ноября 2009

Стоит отметить, что существует разница в количестве операторов приведения, предоставляемых Boost и реализациями TR1.

TR1 не определяет третий оператор const_pointer_cast ()

...