- ¿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_ptrha quedado obsoleta. El consejo es totalmente válido.
En C ++ 0x std::auto_ptrquedará 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_ptrsemántica de movimiento para propiedad única que se puede usar dentro de contenedores (usando semántica de movimiento) y std::shared_ptrcuando 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_ptrquedará obsoleto en C ++ 0x y debería usarlo unique_ptren su lugar. Del último borrador de norma (n3035), sección D.9
La plantilla de clase
auto_ptrestá 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_ptrestá 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_shuffley 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_ptrautomáticamente, usando en su unique_ptrlugar:
Cualquier código que se use
auto_ptrse puede convertir mecánicamente a usarunique_ptr,move()insertándose siempre queauto_ptrse 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_ptres 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.