Pergunta

Qual é o equivalente a um static_cast com boost::shared_ptr?

Em outras palavras, como eu tenho que reescrever o seguinte

Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);

Ao usar shared_ptr?

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
Foi útil?

Solução

Usar boost::static_pointer_cast:

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);

Outras dicas

Existem três operadores de elenco para ponteiros inteligentes: static_pointer_cast, dynamic_pointer_cast, e const_pointer_cast. Eles estão no espaço para nome boost (fornecido por <boost/shared_ptr.hpp>) ou espaço para nome std::tr1 (fornecido pelo Boost ou pela implementação TR1 do seu compilador).

Como comentário: Se derivado, de fato deriva da base, você deve usar um dinâmico_pointer_cast em vez de elencos estáticos. O sistema terá uma chance de detectar quando/se o seu elenco não estiver correto.

Vale mencionar que há diferença no número de operadores de fundição fornecidos pelo Boost e implementações do TR1.

O TR1 não define o terceiro operador const_pointer_cast ()

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top