c++ - smart - ¿Auto_ptr está en desuso?
smart pointers c++ (4)
- ¿Auto_ptr quedará obsoleto en el estándar entrante de C ++?
- ¿Se debe usar unique_ptr para la transferencia de propiedad en lugar de shared_ptr?
- 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_ptrse puede convertir mecánicamente para usarunique_ptr, conmove()insertado siempre queauto_ptrse 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_ptrestá en desuso. [Nota: la plantilla de claseunique_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.