ATL CAutoPtrとSTLのSTDの違い:: auto_ptrは?
-
22-08-2019 - |
質問
私はMFCでいくつかのコードを書いていると私は、オートポインタを使用します。私は、彼らが同じことを行うように見える2つの異なるクラスに遭遇しました:?CAutoPtr
とstd::auto_ptr
二つの異なる実装についての人々の考えはどのようなものです。
さらに、私はstd::tr1::shared_ptr
があると知っています。 ATL / MFCにある同様のshared_ptr
はありますか?
解決
CAutoPtr
とauto_ptr
の両方があなたの所有権のセマンティクスの移転を含むスマートポインタのセマンティクスを与えます。 CAutoPtr
は、ATLクラスです - COMを使用して構築されました。これは、特定のOSのための非標準の拡張機能です。一方、auto_ptr
は、標準C ++です。あなたがそのようなオブジェクトのコンテナを使用する場合CAutoPtrArray
やCAutoPtrList
を使用する必要があります。
注意すべき重要な点は、あなたが戻り値としてauto_ptr_ref
sを返すことができます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のブーストライブラリに実装されます。