次の方法で共有


CAutoPtr クラス

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

重要

このクラスおよびメンバーは、Windows のランタイムで実行するアプリケーションで使用することはできません。

template< 
typename T 
> 
class CAutoPtr

パラメーター

  • T
    ポインター型。

メンバー

パブリック コンストラクター

名前

説明

CAutoPtr::CAutoPtr

コンストラクターです。

CAutoPtr::~CAutoPtr

デストラクターです。

パブリック メソッド

名前

説明

CAutoPtr::Attach

既存のポインターの所有権を持つようにこのメソッドを呼び出します。

CAutoPtr::Detach

ポインターの所有権を解放するためにこのメソッドを呼び出します。

CAutoPtr::Free

指すにオブジェクトを CAutoPtr削除するには、このメソッドを呼び出します。

パブリック演算子

名前

説明

CAutoPtr::operator T*

キャスト演算子。

CAutoPtr::operator =

代入演算子です。

CAutoPtr::operator ->

ポインターメンバー演算子。

パブリック データ メンバー

名前

説明

CAutoPtr::m_p

ポインターのデータ メンバー変数。

解説

このクラスは自動的にリソースを解放することによって、範囲からメモリ リークする場合に対して保護するスマート ポインターを作成および管理するためのメソッドを提供します。

さらに、CAutoPtr のコピー コンストラクターと代入演算子は、コピー先のポインターにソースのポインターをコピーし、NULL にソースのポインターを置くポインターの所有権を譲渡されます。 したがって、同じポインターを格納 CAutoPtr の 2 種類のオブジェクトを個別に設定することはできなくなります。これにより、同じポインターを回削除する可能性が減少します。

CAutoPtr は、ポインターのコレクションを簡単に作成できます。 コレクション クラスを取得し、デストラクターをオーバーライドする代わりに、CAutoPtr のオブジェクトのコレクションを行いやすくなります。 コレクションが削除されるとき、CAutoPtr のオブジェクトがスコープ外に出て、自動的に自分自身を削除します。

CHeapPtr とバリアントは CAutoPtrと同じように動作します。ただし、C++ newdelete の演算子の代わりに異なるヒープ関数を使用してメモリの割り当てと解放します。 CAutoVectorPtrCAutoPtrのメモリの割り当てと解放するに vector new[]vector delete[] を使用することにある唯一の違いに似ています。

スマート ポインターの配列またはリストが要求されると CAutoPtrArrayCAutoPtrList を参照してください。

必要条件

atlbase.hHeader:

使用例

// 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 クラス

その他の技術情報

ATL クラスの概要