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.
- 1. std :: auto_ptr, supprime [] et fuit
- 2. Différence: std :: runtime_error vs std :: exception()
- 3. C++ Différence d'ensemble STL
- 4. Différence entre sqlreader et
- 5. std :: auto_ptr Problème de compilation dans Visual Studio 6.0
- 6. Différence entre -Wconversion entre gcc et g ++
- 7. Différence entre DECLARE_DYNAMIC et DECLARE_DYNCREATE?
- 8. Différence entre JNLP et JavaFX
- 9. Différence entre Session et HttpContext.Current.Session
- 10. Différence entre HTTPContextBase.User et MembershipUser
- 11. Différence entre FileStreamResult et FilePathResult?
- 12. Différence entre Delegate.Invoke et délégué()
- 13. Différence entre scanf() et fgets()
- 14. Différence entre DataGrid et GridView
- 15. Différence entre "__method__" et "méthode"
- 16. Différence entre BOOST_CHECK_CLOSE et BOOST_CHECK_CLOSE_FRACTION?
- 17. Différence entre "\ n" et Environment.NewLine
- 18. Différence entre admin.site.root et admin.site.urls
- 19. Différence entre Roles.GetRolesForUser et Roles.Provider.GetRolesForUser?
- 20. Différence entre val() et text()
- 21. Différence entre control.Attributes.Add et control.Attributes []
- 22. Différence entre value et itemvalue
- 23. Différence entre Send.nc et SendMsg.nc
- 24. Différence entre System.Web.Cache et HTTPContext.Curent.Cache
- 25. Différence entre feature et plugin.xml?
- 26. Comment utiliser un std :: auto_ptr dans une classe que vous devez copier construire?
- 27. Différence entre l'exception d'application et l'exception système
- 28. Différence entre iCalendar (.ics) et vCalendar (.vcs)
- 29. Objective-C: différence entre id et void *
- 30. Différence entre un objet et un hachage?
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++. –