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?

Était-ce utile?

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_ptrs 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.

CAutoPtr est spécifique ATL.

std: auto_ptr et CAutoPtr les deux ne fournissent pas de comptage de référence. Il ressemble à tous les deux ont même fonctionnalité.

Je suppose qu'il n'y a pas shared_ptr dans ATL / MFC. shared_ptr est mis en œuvre dans la bibliothèque boost.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top