質問

私はMFCでいくつかのコードを書いていると私は、オートポインタを使用します。私は、彼らが同じことを行うように見える2つの異なるクラスに遭遇しました:?CAutoPtrstd::auto_ptr二つの異なる実装についての人々の考えはどのようなものです。

さらに、私はstd::tr1::shared_ptrがあると知っています。 ATL / MFCにある同様のshared_ptrはありますか?

役に立ちましたか?

解決

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

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

auto_ptrはC ++ 0xの中で推奨されていません。あなたがしなければならない場合、unique_ptrを使用してください:あなたは移動を意識した容器にそれらを使用してもL値の危険な暗黙の動きから、いくつかの安全性を得ることができます。

他のヒント

ATL / MFCでのshared_ptrに近い事がCComPtrです。 COMオブジェクトで使用されることを意味しているが、それはのAddRef /リリース参照カウント法を含む任意のクラスで使用することができます。

CAutoPtrは、ATL固有のものです。

のstd:auto_ptrをとCAutoPtrの両方が参照カウントを提供していません。両方が同じ機能を持っているように見えます。リンクテキスト

私は、ATL / MFCにはshared_ptrのは存在しないと思います。 shared_ptrのブーストライブラリに実装されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top