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 ()