shared_ptr make_shared example c++ boost smart-pointers shared-ptr

c++ - make_shared - obteniendo un ptr normal de shared_ptr?



example boost (2)

Otra forma de hacerlo sería usar una combinación de los operadores & y * :

boost::shared_ptr<foo> foo_ptr(new foo()); c_library_function( &*foo_ptr);

Si bien personalmente preferiría usar el método get() es realmente la respuesta correcta), una de las ventajas es que se puede usar con otras clases que sobrecargan el operator* (desreferencia del puntero), pero no proporcionan un get() método. Puede ser útil en la plantilla de clase genérica, por ejemplo.

Tengo algo así como shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe)) Ahora necesito llamar a la función de estilo C que requiere un puntero a Type . ¿Cómo lo obtengo de shared_ptr ?


Use el método get() :

boost::shared_ptr<foo> foo_ptr(new foo()); foo *raw_foo = foo_ptr.get(); c_library_function(raw_foo);

Asegúrese de que su shared_ptr no salga del alcance antes de que la función de la biblioteca shared_ptr ; de lo contrario, podría producirse maldad, ya que la biblioteca puede intentar hacer algo con el puntero una vez que se haya eliminado. Tenga especial cuidado si la función de biblioteca mantiene una copia del puntero sin procesar después de que vuelve.