1

MFC でコードを書いていて、自動ポインターを使用したいと考えています。同じことをしているように見える 2 つの異なるクラスに出くわしました:CAutoPtrおよびstd::auto_ptr2 つの異なる実装について人々の考えは?

さらに、私はあることを知っていますstd::tr1::shared_ptrshared_ptrATL/MFC に似たものはありますか?

4

3 に答える 3

2

との両方が、所有権のセマンティクスの転送を含むスマート ポインター セマンティクスを提供しますCAutoPtr。COM を使用して構築された ATL クラスです。これは、特定の OS の非標準拡張機能です。一方、標準 C++ です。そのようなオブジェクトのコンテナを使用したい場合は、またはを使用する必要があります。auto_ptrCAutoPtrauto_ptrCAutoPtrArrayCAutoPtrList

注意すべき重要な点は、戻り値として sauto_ptr_refを返すことができるというものがあるということです。auto_ptrではそんなことはありませんCAutoPtr

auto_ptrC++0x では非推奨です。必要に応じて使用unique_ptrしてください: 移動認識コンテナーで使用でき、左辺値の安全でない暗黙的な移動からある程度の安全性を得ることができます。

于 2009-03-28T22:18:36.513 に答える
1

ATL/MFC で shared_ptr に最も近いのは CComPtr です。COM オブジェクトで使用することを意図していますが、AddRef/Release 参照カウント メソッドを含む任意のクラスで使用できます。

于 2009-03-28T22:44:37.153 に答える
0

CAutoPtr は ATL 固有です。

std:auto_ptr と CAutoPtr はどちらも参照カウントを提供しません。どちらも同じ機能を持っているようです。リンクテキスト

ATL/MFC には shared_ptr がないと思います。shared_ptr は boost ライブラリに実装されています。

于 2009-03-28T22:24:51.367 に答える