MISE À JOUR: Cette réponse a été écrite en 2010 et comme prévu std::auto_ptr
est obsolète. Le conseil est entièrement valable.
En C++ 0x std::auto_ptr
sera déconseillé au profit de std::unique_ptr
. Le choix du pointeur intelligent dépendra de votre cas d'utilisation et de vos besoins, avec std::unique_ptr
avec la sémantique de déplacement pour une propriété unique qui peut être utilisée à l'intérieur des conteneurs (en utilisant la sémantique de déplacement) et std::shared_ptr
lorsque la propriété est partagée.
Vous devez essayer d'utiliser le pointeur intelligent qui correspond le mieux à la situation, le choix du type de pointeur correct fournit aux autres programmeurs un aperçu de votre conception.
Oui, à partir d'aujourd'hui auto_ptr
sera déconseillé en C++ 0x et vous devez utiliser unique_ptr
au lieu. D'après le dernier projet de norme (n3035), section D.9
Le modèle de classe
auto_ptr
est obsolète. [Remarque: le modèle de classeunique_ptr
(20.9.10) fournit une meilleure solution. —Fin note]
Jusqu'à ce que la norme soit ratifiée, il est toujours possible que le comité révise cette décision, même si je pense que c'est peu probable pour cette décision.
Non seulement auto_ptr
Est déconseillé en C++ 11 (D.10, page 1228) , il sera également suppriméen une future version de C++ :
Adopté N4190 et supprimé (pas seulement obsolète) plusieurs éléments archaïques de la bibliothèque standard C++, notamment
auto_ptr
,bind1st
/bind2nd
,ptr_fun
/mem_fun
/mem_fun_ref
,random_shuffle
, Et quelques autres. Ceux-ci sont maintenant tous supprimés du projet de bibliothèque standard C++ 17 et ne feront pas partie du futur C++ portable.
Un autre document à ce sujet: Programming Language C++, Library Evolution Working Group - Document N419 , si vous voulez plus d'informations.
Vous pouvez convertir n'importe quel code en utilisant auto_ptr
Automatiquement, en utilisant unique_ptr
À la place:
Tout code utilisant
auto_ptr
Peut être mécaniquement converti en utilisantunique_ptr
, Avecmove()
inséré chaque fois queauto_ptr
Était "copié".
Non, ce n'est pas obsolète. C'est possible, si jamais C++ 0x est accepté. Et il sera réaliste toujours toujours pris en charge. Je ne pense pas qu'une fonctionnalité obsolète ait été supprimée des implémentations C++ réelles.