smart shared_ptr pointer make_shared example c++ pointers shared

pointer - C++ puntero crudo y std:: shared_ptr



smart pointers c++ 11 (3)

Estoy trabajando con std::shared_ptr y durante mi desarrollo de software me encontré con un par de casos que me permitieron dudar sobre la administración de la memoria. Tenía una biblioteca de terceros que siempre me proporcionaba punteros sin procesar de funciones y en mi código los estaba transformando en std::shared_ptr (desde std y no desde boost. ¿Por cierto cuál es la diferencia entre los dos?). Así que digamos que tengo el siguiente código:

ClassA* raw = new ClassA; std::shared_ptr<ClassA> shared(raw);

Qué sucede ahora cuando el puntero compartido queda fuera del alcance (digamos que se declaró localmente en una función y ahora estoy saliendo de la función). ¿ ClassA objeto ClassA porque un puntero en bruto lo señala?


No, el objeto ClassA será destruido. A menos que no haya copiado shared_ptr algún lugar fuera del alcance, su contador de referencia es> 1.


No, no lo hará. Al asignar el puntero a shared_ptr, se le otorga a shared_ptr la responsabilidad de eliminarlo. Hará esto cuando ya no exista el último objeto shared_ptr que se refiere a él. Los punteros crudos no cuentan.


no. El puntero compartido lo borrará.

Si tiene una biblioteca de terceros que le proporciona un puntero, debe asegurarse de eliminarlo de la manera correcta. Si la biblioteca de terceros lo asignó con ''malloc'' por ejemplo, entonces necesita usar la implementación de ''libre'' que usa la biblioteca. Tienes que estar seguro de cómo fue asignado.

¿La biblioteca ofrece una forma de destruir los objetos que te proporciona? En cuyo caso deberías usar esa función para destruirlo.