static_cast avec boost :: shared_ptr?
-
05-07-2019 - |
Question
Quel est l'équivalent d'un static_cast
avec boost::shared_ptr
?
En d’autres termes, comment dois-je réécrire ce qui suit
Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);
lors de l'utilisation de shared_ptr
?
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
La solution
Utilisez boost::static_pointer_cast
:
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
Autres conseils
Il existe trois opérateurs de diffusion pour les pointeurs intelligents: static_pointer_cast
, dynamic_pointer_cast
et const_pointer_cast
. Ils se trouvent soit dans l'espace de noms boost
(fourni par <boost/shared_ptr.hpp>
), soit dans l'espace de noms std::tr1
(fourni par Boost ou par l'implémentation TR1 de votre compilateur).
Comme commentaire: si Derived dérive effectivement de Base, vous devez utiliser un dynamic_pointer_cast plutôt que des conversions statiques. Le système aura une chance de détecter quand / si votre distribution est incorrecte.
Il convient de mentionner qu’il existe une différence entre le nombre d’opérateurs de casting fournis par Boost et les implémentations de TR1.
Le TR1 ne définit pas le troisième opérateur const_pointer_cast ()