smart c++ standards smart-pointers auto-ptr unique-ptr

c++ - smart - ¿Auto_ptr está en desuso?



smart pointers c++ (4)

  1. ¿Auto_ptr quedará obsoleto en el estándar entrante de C ++?
  2. ¿Se debe usar unique_ptr para la transferencia de propiedad en lugar de shared_ptr?
  3. Si unique_ptr no está en el estándar, ¿necesito usar shared_ptr en su lugar?

No solo auto_ptr está en desuso en C ++ 11 (D.10, página 1228) , sino que también se eliminará en una versión futura de C ++ :

Adopté N4190 y de hecho eliminé (no solo obsoleta) varias cosas arcaicas de la biblioteca estándar de C ++, incluidas auto_ptr , bind1st / bind2nd , ptr_fun / mem_fun / mem_fun_ref , random_shuffle , y algunas más. Esos ahora son eliminados del borrador de la biblioteca estándar de C ++ 17 y no serán parte del futuro C ++ portátil.

Otro documento al respecto: Lenguaje de programación C ++, Grupo de trabajo de evolución de la biblioteca - Documento N4190 , si desea más información.

Puede convertir cualquier código usando auto_ptr automática, utilizando unique_ptr en unique_ptr lugar:

Cualquier código que use auto_ptr se puede convertir mecánicamente para usar unique_ptr , con move() insertado siempre que auto_ptr se esté "copiando".


No, no está en desuso. Puede ser, si alguna vez se acepta C ++ 0x. Y, de manera realista, siempre será compatible. No creo que alguna característica en desuso nunca haya sido eliminada de las implementaciones de C ++ en el mundo real.


Sí, a partir de hoy, auto_ptr quedará obsoleto en C ++ 0x y en su lugar debería usar unique_ptr . Del último borrador de norma (n3035), sección D.9

La plantilla de clase auto_ptr está en desuso. [Nota: la plantilla de clase unique_ptr (20.9.10) proporciona una mejor solución. -finalizar nota]

Hasta que se ratifique el estándar, siempre es posible que el comité revise esta decisión, aunque creo que es poco probable para esta decisión.


ACTUALIZACIÓN: esta respuesta se escribió en 2010 y, como se esperaba, std::auto_ptr quedó en desuso. El consejo es completamente válido.

En C ++ 0x, std::auto_ptr quedará obsoleto a favor de std::unique_ptr . La elección del puntero inteligente dependerá de su caso de uso y sus requisitos, con std::unique_ptr con semántica de movimiento para propiedad individual que se puede usar dentro de contenedores (usando la semántica de movimiento) y std::shared_ptr cuando se comparte la propiedad.

Debe intentar usar el puntero inteligente que mejor se adapte a la situación, elegir el tipo de puntero correcto proporciona a otros programadores una idea de su diseño.