J'écris du code dans MFC et je veux utiliser des pointeurs automatiques. J'ai rencontré deux classes différentes qui semblent faire la même chose: CAutoPtr
et std::auto_ptr
Quelles sont les pensées des gens sur les deux implémentations différentes? En outre, je sais qu'il existe std::tr1::shared_ptr
. Y a-t-il un shared_ptr
similaire qui se trouve dans ATL/MFC?Différence entre ATL CAutoPtr et STL std :: auto_ptr?
Répondre
Les deux CAutoPtr
et auto_ptr
vous donnent une sémantique de pointeur intelligent, y compris le transfert de sémantique de propriété. CAutoPtr
est une classe ATL - construite en utilisant COM. C'est une extension non-standard pour un OS particulier. D'autre part, la norme C123 est auto_ptr
. Si vous souhaitez utiliser un conteneur de tels objets, vous devez utiliser CAutoPtrArray
ou CAutoPtrList
.
Un point important à noter est qu'il existe un élément appelé auto_ptr_ref
qui vous permet de renvoyer auto_ptr
s comme valeur de retour. Il n'y a pas une telle chose avec CAutoPtr
.
auto_ptr
est déprécié en C++ 0x. Utilisez unique_ptr
si vous devez: vous pouvez les utiliser dans des conteneurs sensibles au déplacement et obtenir également une certaine sécurité à partir des mouvements implicites non sécurisés des valeurs l.
CAutoPtr est spécifique à ATL. Std: auto_ptr et CAutoPtr n'offrent pas de comptage de référence. On dirait que les deux ont la même fonctionnalité. link text
Je suppose qu'il n'y a pas shared_ptr dans ATL/MFC. shared_ptr est implémenté dans la bibliothèque boost.
La chose la plus proche de shared_ptr dans ATL/MFC est CComPtr. Il est destiné à être utilisé sur des objets COM, mais il peut être utilisé sur n'importe quelle classe qui inclut des méthodes de comptage de références AddRef/Release.
Bonne réponse. Cependant, autant que je sache, CAutoPtr n'a rien à voir avec COM. –
CAutoPtr n'est pas spécifique au système d'exploitation ou à la COM, c'est du vieux C++. –