Différence entre ATL CAutoPtr et STL std :: auto_ptr?
-
22-08-2019 - |
Question
J'écris un code dans MFC et je veux utiliser des pointeurs auto. Je suis venu dans deux classes différentes qui ressemblent ils font la même chose: CAutoPtr
et std::auto_ptr
Quelles sont les pensées des gens sur les deux implémentations différentes
De plus, je sais qu'il ya std::tr1::shared_ptr
. Y at-il un shared_ptr
similaire qui est dans ATL / MFC?
La solution
Les deux CAutoPtr
et auto_ptr
vous donnent la sémantique de pointeur intelligent, y compris le transfert de la sémantique de propriété. CAutoPtr
est une classe ATL - construit en utilisant COM. Il est une extension non standard pour un système d'exploitation particulier. auto_ptr
d'autre part est standard C ++. Si vous souhaitez utiliser un conteneur de ces objets vous devez utiliser CAutoPtrArray
ou CAutoPtrList
.
Un point important à noter est qu'il ya quelque chose appelé auto_ptr_ref
qui vous permet de revenir auto_ptr
s comme une valeur de retour. Il n'y a pas une telle chose avec CAutoPtr
.
auto_ptr
est obsolète en C ++ 0x. Utilisez unique_ptr
si vous devez:. Vous pouvez les utiliser dans les conteneurs de-courant et aussi obtenir une certaine sécurité de mouvements implicites dangereuses de l valeurs
Autres conseils
La chose la plus proche shared_ptr dans ATL / MFC est CComPtr. Il est destiné à être utilisé sur les objets COM, mais il peut être utilisé sur toute classe qui comprend des méthodes de comptage de référence AddRef / Release.