Est-ce que auto_ptr est obsolète?

  1. Est-ce que auto_ptr sera obsolète dans le standard C ++ entrant?
  2. Est-ce que unique_ptr doit être utilisé pour le transfert de propriété au lieu de shared_ptr?
  3. Si unique_ptr n’est pas dans la norme, dois-je plutôt utiliser shared_ptr?

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 classe unique_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 utilisant unique_ptr , avec move() 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.