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é en faveur 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 la propriété unique pouvant être utilisée dans les conteneurs (à l’aide de la sémantique de déplacement) et std::shared_ptr
lorsque la propriété est partagée.
Vous devriez essayer d’utiliser le pointeur intelligent qui correspond le mieux à la situation, en choisissant le type de pointeur approprié, vous aurez un aperçu des autres concepteurs.
Oui, à partir d’aujourd’hui, auto_ptr
sera obsolète en C ++ 0x et vous devrez utiliser plutôt unique_ptr
. D’après le dernier projet de norme (n3035), section D.9
Le modèle de classe
auto_ptr
est obsolète. [Note: Le modèle de classeunique_ptr
(20.9.10) fournit une meilleure solution. —End note]
Jusqu’à ce que la norme soit ratifiée, il est toujours possible que le comité révise cette décision, même si j’estime que cela est peu probable pour cette décision.
Non seulement auto_ptr
est déconseillé dans C ++ 11 (D.10, page 1228) , il sera également supprimé dans une future version de C ++ :
Adopté N4190, et en fait enlevé (pas seulement déconseillé) plusieurs choses archaïques de la bibliothèque standard C ++, y compris
auto_ptr
,bind1st
/bind2nd
,ptr_fun
/mem_fun
/mem_fun_ref
,random_shuffle
, et quelques autres. Celles-ci sont maintenant toutes supprimées du brouillon de la bibliothèque standard C ++ 17 et ne feront plus partie du futur C ++ portable.
Un autre document à ce sujet: Langage de programmation C ++, Groupe de travail Evolution de la bibliothèque – Document N4190 , si vous souhaitez plus d’informations.
Vous pouvez convertir n’importe quel code en utilisant auto_ptr
automatiquement, en utilisant plutôt unique_ptr
:
Tout code utilisant
auto_ptr
peut être converti mécaniquement en utilisantunique_ptr
, avecmove()
inséré à chaque fois que ”auto_ptr
est “copié”.
Non, ce n’est pas obsolète. C’est peut-être le cas si C ++ 0x est accepté. Et ce sera toujours réaliste. Je ne crois pas qu’une fonctionnalité obsolète ait jamais été supprimée des implémentations C ++ du monde réel.