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 = ???
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top