2009-03-28 5 views
1

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

2

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.

+2

Bonne réponse. Cependant, autant que je sache, CAutoPtr n'a rien à voir avec COM. –

+0

CAutoPtr n'est pas spécifique au système d'exploitation ou à la COM, c'est du vieux C++. –

0

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.

1

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.

Questions connexes