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

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_ptrs (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()) );
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top