boost :: Convertir shared_ptr en classe réelle
-
30-09-2019 - |
Question
Comment quelqu'un faire ça? par exemple:
Client* client = it->second;
où IT-> second est un coup de pouce :: shared_ptr au client erreur:
cannot convert `const ClientPtr' to `Client*' in initialization
La solution
boost :: shared_ptr a une méthode .get () pour récupérer le pointeur brut.
Documentation ici quand et pourquoi ne pas l'utiliser: http : //www.boost.org/doc/libs/1_44_0/libs/smart_ptr/shared_ptr.htm
Autres conseils
Vous pouvez utiliser la méthode get
sur la boost::shared_ptr
pour récupérer le pointeur, mais être très attention à ce que vous faites: extraire un pointeur nu à partir d'un comptage de références pointeur partagé peut être dangereux (suppression sera déclenché si le cours de comptage de référence zéro, invalidant ainsi votre pointeur brut).
boost:shared_ptr
operator*
surcharge:
boost::shared_ptr< T > t_ptr(new T());
*t_ptr; // this expression is a T object
Pour obtenir un pointeur vers t
vous pouvez utiliser la fonction de get
ou de prendre adresse *t_ptr
:
&*t_ptr; // this expression is a T*
La première méthode (en utilisant get
) est probablement mieux, et a moins de frais généraux, mais il fonctionne uniquement avec shared_ptr
s (ou des pointeurs avec une API compatible), et non pas avec d'autres types de pointeurs.
Non dangereux mais c-cteur impliqués.
Client client( *(it->second.get()) );