2009-03-28 6 views
1

Ich schreibe etwas Code in MFC und ich möchte Autozeiger verwenden. Ich bin auf zwei verschiedene Klassen gestoßen, die aussehen, als würden sie das Gleiche tun: CAutoPtr und std::auto_ptr Was denken die Leute über die zwei verschiedenen Implementierungen?Unterschied zwischen ATL CAutoPtr und STL std :: auto_ptr?

Weiter weiß ich, dass es std::tr1::shared_ptr gibt. Gibt es eine ähnliche shared_ptr, die in ATL/MFC ist?

Antwort

2

Sowohl CAutoPtr als auch auto_ptr geben Ihnen eine intelligente Pointer-Semantik, einschließlich der Übertragung der Besitz-Semantik. CAutoPtr ist eine ATL-Klasse - mit COM gebaut. Es ist eine nicht standardmäßige Erweiterung für ein bestimmtes Betriebssystem. auto_ptr auf der anderen Seite ist Standard C++. Wenn Sie einen Container mit solchen Objekten verwenden möchten, müssen Sie CAutoPtrArray oder CAutoPtrList verwenden.

Ein wichtiger Punkt zu beachten ist, dass es etwas gibt, das auto_ptr_ref genannt wird, mit dem Sie auto_ptr s als Rückgabewert zurückgeben können. Es gibt keine solche Sache mit CAutoPtr.

auto_ptr ist in C++ 0x veraltet. Verwenden Sie unique_ptr, wenn Sie müssen: Sie können sie in move-aware-Containern verwenden und erhalten auch eine gewisse Sicherheit vor unsicheren impliziten Bewegungen von l-Werten.

+2

Schöne Antwort. Soweit ich weiß, hat CAutoPtr jedoch nichts mit COM zu tun. –

+0

CAutoPtr ist nicht OS oder COM-spezifisch, - es ist einfach alt C++. –

0

CAutoPtr ist ATL-spezifisch.

Std: Auto_ptr und CAutoPtr beide bieten keine Referenzzählung. Es sieht so aus, als ob beide dieselbe Funktionalität haben. link text

Ich denke, es gibt keine shared_ptr in ATL/MFC. shared_ptr ist in der Boost-Bibliothek implementiert.

1

Am nächsten zu Shared_ptr in ATL/MFC ist CComPtr. Es soll für COM-Objekte verwendet werden, es kann jedoch für jede Klasse verwendet werden, die die Zählmethoden AddRef/Release enthält.

Verwandte Themen