static_cast con impulso::shared_ptr?
-
05-07-2019 - |
Pregunta
¿Cuál es el equivalente de un static_cast
con boost::shared_ptr
?
En otras palabras, ¿cómo tengo que reescribir lo siguiente?
Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);
cuando usas shared_ptr
?
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
Solución
Use boost::static_pointer_cast
:
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
Otros consejos
Hay tres operadores de conversión 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).
Como comentario: si Derived de hecho deriva de Base, entonces debería usar un dynamic_pointer_cast en lugar de conversiones estáticas. El sistema tendrá la posibilidad de detectar cuándo / si su lanzamiento no es correcto.
Vale la pena mencionar que existe una diferencia en el número de operadores de transmisión proporcionados por Boost y las implementaciones de TR1.
El TR1 no define el tercer operador const_pointer_cast ()