- Auto_ptr sera-t-il déconseillé dans le standard C++ entrant?
- Devrait-on utiliser unique_ptr pour le transfert de propriété au lieu de shared_ptr?
- Si single_ptr n'est pas dans la norme, ai-je besoin d'utiliser shared_ptr à la place?
Répondre
MISE À JOUR: Cette réponse a été écrite en 2010 et comme prévu std::auto_ptr
a été abandonnée. Le conseil est entièrement valide.
En C++ 0x std::auto_ptr
sera dépréciée en faveur de std::unique_ptr
. Le choix du pointeur intelligent dépend de votre cas d'utilisation et de vos besoins, avec std::unique_ptr
avec une 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 devriez essayer d'utiliser le pointeur intelligent qui correspond le mieux à la situation, choisir le bon type de pointeur fournit aux autres programmeurs un aperçu de votre conception.
Oui, à compter d'aujourd'hui auto_ptr
sera obsolète en C++ 0x et vous devrez utiliser unique_ptr
à la place. À partir du 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é revoie cette décision bien que je pense que cela soit peu probable pour cette décision.
Non, ce n'est pas obsolète. Il se peut que C++ 0x soit accepté. Et il sera réaliste toujours soutenu. Je ne crois pas que toute fonctionnalité obsolète ait jamais été supprimée des implémentations C++ réelles.
Non seulement auto_ptr
est dépréciée in C++11 (D.10, page 1228), il sera également suppriméin a future version of C++:
Adopté N4190, et effectivement retiré (pas seulement désapprouvée) 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. Ceux-ci sont maintenant tous supprimés de la bibliothèque standard du projet C++ 17 et ne feront pas partie du futur C++ portable.
Un autre document à ce sujet: Programming Language C++, Library Evolution Working Group - Document N4190, si vous voulez plus d'informations.
Vous pouvez convertir tout code à l'aide auto_ptr
automatiquement, à l'aide unique_ptr
à la place:
Tout code utilisant
auto_ptr
peut être converti mécaniquement à l'aide inséréunique_ptr
, avecmove()
chaque foisauto_ptr
était « copié ».
+1 pour noter que les fonctionnalités désapprouvées sont retenues –
La norme C de mise à jour n'a été une fois, et qui était fondamentalement juste un rectificatif technique (à savoir fixé à des problèmes qui avaient été cités). Ce n'est pas surprenant que ça n'ait rien enlevé. OTOH, les anciennes fonctionnalités sont finalement abandonnées par les compilateurs. Juste par exemple, plus de C++ a probablement utilisé '' que jamais utilisé 'auto_ptr', mais MS VC++ (pour un) ne le fournit plus. –
@Jerry iostream.h n'a jamais fait partie d'aucune norme. Et en tant que tel, il n'est pas obsolète. –