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 = ???
Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top