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_ptr
se puede convertir mecánicamente para usarunique_ptr
, conmove()
insertado siempre queauto_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 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.