次の方法で共有


CAutoPtr クラス

更新 : 2007 年 11 月

このクラスは、スマート ポインタ オブジェクトを表します。

template< 
   typename T
>
class CAutoPtr

パラメータ

  • T
    ポインタ型。

解説

このクラスには、スマート ポインタを作成し、管理するメソッドが用意されています。このメソッドは、スコープ外に出たリソースを解放し、メモリ リークを防ぎます。

さらに、CAutoPtr のコピー コンストラクタと代入演算子は、ポインタを別のポインタにコピーし、元のポインタに NULL を設定することにより、ポインタの所有権を転送します。これにより、同じポインタを 2 つの CAutoPtr オブジェクトに格納できなくなるため、同じポインタを 2 度削除する可能性を減らすことができます。

また、CAutoPtr によって、ポインタのコレクションの作成を簡単に行うことができます。コレクション クラスを派生し、デストラクタをオーバーライドするよりも、CAutoPtr オブジェクトのコレクションを作成する方が簡単です。コレクションを削除すると、CAutoPtr オブジェクトはスコープからはずれ、自動的に削除されます。

メモリの割り当てと解放を行うときに、C++ の new 演算子と delete 演算子ではなく別のヒープ関数を使用する点を除けば、CHeapPtr とバリアントは、CAutoPtr と同じ動作をします。メモリの割り当ておよび解放に vector new[] および vector delete[] を使用する点を除けば、CAutoVectorPtrCAutoPtr とよく似ています。

スマート ポインタの配列またはリストが必要な場合は、「CAutoPtrArray クラス」および「CAutoPtrList クラス」も参照してください。

必要条件

ヘッダー : atlbase.h

使用例

// A simple class for demonstration purposes

class MyClass 
{
   int iA;
   int iB;
public:
   MyClass(int a, int b);
   void Test();
};

MyClass::MyClass(int a, int b)
{
   iA = a;
   iB = b;
}

void MyClass::Test()
{
   ATLASSERT(iA == iB);
}

// A simple function

void MyFunction(MyClass* c)
{
   c->Test();
}

int UseMyClass()
{
   // Create an object of MyClass.
   MyClass *pMyC = new MyClass(1, 1);

   // Create a CAutoPtr object and have it take
   // over the pMyC pointer by calling Attach.
   CAutoPtr<MyClass> apMyC;
   apMyC.Attach(pMyC);

   // The overloaded -> operator allows the 
   // CAutoPtr object to be used in place of the pointer.
   apMyC->Test();

   // Assign a second CAutoPtr, using the = operator.
   CAutoPtr<MyClass> apMyC2;
   apMyC2 = apMyC;

   // The casting operator allows the
   // object to be used in place of the pointer.
   MyFunction(pMyC);
   MyFunction(apMyC2);

   // Detach breaks the association, so after this
   // call, pMyC is controlled only by apMyC.
   apMyC2.Detach();

   // CAutoPtr destroys any object it controls when it
   // goes out of scope, so apMyC destroys the object 
   // pointed to by pMyC here.
   return 0;
}

参照

参照

CHeapPtr クラス

CAutoVectorPtr クラス

その他の技術情報

CAutoPtr のメンバ

ATL クラスの概要