MFC でコードを書いていて、自動ポインターを使用したいと考えています。同じことをしているように見える 2 つの異なるクラスに出くわしました:CAutoPtr
およびstd::auto_ptr
2 つの異なる実装について人々の考えは?
さらに、私はあることを知っていますstd::tr1::shared_ptr
。shared_ptr
ATL/MFC に似たものはありますか?
MFC でコードを書いていて、自動ポインターを使用したいと考えています。同じことをしているように見える 2 つの異なるクラスに出くわしました:CAutoPtr
およびstd::auto_ptr
2 つの異なる実装について人々の考えは?
さらに、私はあることを知っていますstd::tr1::shared_ptr
。shared_ptr
ATL/MFC に似たものはありますか?
との両方が、所有権のセマンティクスの転送を含むスマート ポインター セマンティクスを提供しますCAutoPtr
。COM を使用して構築された ATL クラスです。これは、特定の OS の非標準拡張機能です。一方、標準 C++ です。そのようなオブジェクトのコンテナを使用したい場合は、またはを使用する必要があります。auto_ptr
CAutoPtr
auto_ptr
CAutoPtrArray
CAutoPtrList
注意すべき重要な点は、戻り値として sauto_ptr_ref
を返すことができるというものがあるということです。auto_ptr
ではそんなことはありませんCAutoPtr
。
auto_ptr
C++0x では非推奨です。必要に応じて使用unique_ptr
してください: 移動認識コンテナーで使用でき、左辺値の安全でない暗黙的な移動からある程度の安全性を得ることができます。
ATL/MFC で shared_ptr に最も近いのは CComPtr です。COM オブジェクトで使用することを意図していますが、AddRef/Release 参照カウント メソッドを含む任意のクラスで使用できます。
CAutoPtr は ATL 固有です。
std:auto_ptr と CAutoPtr はどちらも参照カウントを提供しません。どちらも同じ機能を持っているようです。リンクテキスト
ATL/MFC には shared_ptr がないと思います。shared_ptr は boost ライブラリに実装されています。