c++ boost shared-ptr static-cast

c++ - static_cast con boost:: shared_ptr?



shared-ptr static-cast (4)

¿Cuál es el equivalente de un static_cast con boost::shared_ptr ?

En otras palabras, ¿cómo tengo que reescribir el siguiente

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

cuando se usa shared_ptr ?

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


Como comentario: si Derived deriva de Base, entonces debes usar un dynamic_pointer_cast en lugar de cast de estática. El sistema tendrá la posibilidad de detectar cuándo / si su lanzamiento no es correcto.


Hay tres operadores de static_pointer_cast para punteros inteligentes: static_pointer_cast , dynamic_pointer_cast y const_pointer_cast . Están en el espacio de nombres boost (proporcionado por <boost/shared_ptr.hpp> ) o espacio de nombres std::tr1 (proporcionado por Boost o por la implementación TR1 de su compilador).


Utilice boost::static_pointer_cast :

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


Vale la pena mencionar que existe una diferencia en el número de operadores de casting proporcionados por Boost y las implementaciones de TR1.

El TR1 no define el tercer operador const_pointer_cast ()