- ¿Auto_ptr quedará obsoleto en el estándar entrante de C ++?
- ¿Debería usarse 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?
ACTUALIZACIÓN: Esta respuesta se escribió en 2010 y, como se anticipó, std::auto_ptr
ha quedado obsoleta. El consejo es totalmente válido.
En C ++ 0x std::auto_ptr
quedará obsoleto en favor de std::unique_ptr
. La elección del puntero inteligente dependerá de su caso de uso y sus requisitos, con std::unique_ptr
semántica de movimiento para propiedad única que se puede usar dentro de contenedores (usando semántica de movimiento) y std::shared_ptr
cuando la propiedad es compartida.
Debe intentar utilizar 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.
Sí, a partir de hoy auto_ptr
quedará obsoleto en C ++ 0x y debería usarlo unique_ptr
en su lugar. Del último borrador de norma (n3035), sección D.9
La plantilla de clase
auto_ptr
está obsoleta. [Nota: la plantilla de claseunique_ptr
(20.9.10) proporciona una mejor solución. —Nota final]
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.
No solo auto_ptr
está obsoleto en C ++ 11 (D.10, página 1228) , sino que también se eliminará en una versión futura de C ++ :
Adoptado N4190, y en realidad eliminado (no sólo no se use) varias cosas arcaicas de la biblioteca de C ++ estándar, incluyendo
auto_ptr
,bind1st
/bind2nd
,ptr_fun
/mem_fun
/mem_fun_ref
,random_shuffle
y algunos más. Ahora se han eliminado del borrador de la biblioteca estándar de C ++ 17 y no formarán parte del futuro C ++ portátil.
Otro documento al respecto: Lenguaje de programación C ++, Grupo de trabajo de evolución de bibliotecas - Documento N4190 , si desea más información.
Puede convertir cualquier código usando auto_ptr
automáticamente, usando en su unique_ptr
lugar:
Cualquier código que se use
auto_ptr
se puede convertir mecánicamente a usarunique_ptr
,move()
insertándose siempre queauto_ptr
se esté "copiando".
No, no está en desuso. Puede serlo, si alguna vez se acepta C ++ 0x. Y, de manera realista, siempre será compatible. No creo que alguna característica obsoleta se haya eliminado de las implementaciones de C ++ del mundo real.
<iostream.h>
que nuncaauto_ptr
, pero MS VC ++ ( por ejemplo ) ya no lo proporciona.auto_ptr
es parte del estándar, pero se usa sustancialmente menos. Desde un punto de vista práctico, su eliminación tendrá un impacto drásticamente menor.