std::unique_ptr
es de hecho la nueva forma recomendada. Con los contenedores C++ 0x se activará el movimiento, lo que significa que pueden manejar tipos que se pueden mover correctamente (es decir, std::vector<std::auto_ptr<x> >
no funciona, pero std::vector<std::unique_ptr<x>>
).
Para boost
, los contenedores ya admiten tipos móviles, donde boost::interprocess::unique_ptr
es uno de ellos. Se asemejan a los tipos móviles en pre C++ 0x mediante el uso de algunos de la magia de la plantilla boost "normal", y usan referencias r-value donde son compatibles.
No sabía acerca de la depreciación dedicada auto_ptr
, sin embargo, no he seguido de cerca el nuevo estándar de evolución.
(edición) La implementación de boost::interprocess::unique_ptr
no es de hecho un smart-puntero "público" como boost::shared_ptr
o boost::scoped_ptr
, pero es (ver boost.interprocess's site) no sólo para la memoria compartida, pero también se puede utilizar para general- propósito.
Sin embargo, estoy bastante seguro de que si GCC deja de tener en cuenta la plantilla auto_ptr
, ya proporcionan su propia implementación unique_ptr
(no se usa mucho para desaprobar si aún no tiene una alternativa viable).
Sin embargo, todo se dice, si está trabajando en una plataforma C++ 0x, utilice unique_ptr
, disponible en lib del compilador, si no, seguir con auto_ptr
.
'Será obsoleto' es fuerte. El borrador actual propone este cambio. Espera a que se convierta en un estándar. –
sí. pero sin dudas, sería muy sorprendente que auto_ptr no se desaproveche. sirve para el mismo propósito que unique_ptr, simplemente de una manera horrible :) (abusando del cctor) –
@litb: Aunque he llegado a respetar auto_ptr, estoy de acuerdo con usted que puede ser difícil de usar correctamente. Pero C++ es muy complejo de suponer que unique_ptr va a ser un reemplazo aceptable sin mucho estudio y prueba, al menos las debilidades de auto_ptr se entienden bien. –