J'ai quelque chose comme shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe))
J'ai maintenant besoin d'appeler une fonction de style C qui nécessite un pointeur sur Type
. Comment l'obtenir auprès de shared_ptr
?
Utilisez la méthode get()
:
boost::shared_ptr<foo> foo_ptr(new foo());
foo *raw_foo = foo_ptr.get();
c_library_function(raw_foo);
Assurez-vous que votre shared_ptr
ne sort pas de la portée avant que la fonction de bibliothèque ne soit finie - sinon cela pourrait entraîner des problèmes, car la bibliothèque peut essayer de faire quelque chose avec le pointeur après sa suppression. Soyez particulièrement prudent si la fonction de bibliothèque conserve une copie du pointeur brut après son retour.
Une autre façon de le faire serait d'utiliser une combinaison des opérateurs &
Et *
:
boost::shared_ptr<foo> foo_ptr(new foo());
c_library_function( &*foo_ptr);
Bien que personnellement, je préfère utiliser la méthode get()
(c'est vraiment la bonne réponse), cela a l'avantage d'être utilisable avec d'autres classes qui surchargent operator*
(Déréférencement de pointeurs ), mais ne fournissez pas de méthode get()
. Peut être utile dans un modèle de classe générique, par exemple.