CAutoPtr クラス
このクラスは、スマート ポインター オブジェクトを表します。
重要 |
---|
このクラスおよびメンバーは、Windows のランタイムで実行するアプリケーションで使用することはできません。 |
template<
typename T
>
class CAutoPtr
パラメーター
- T
ポインター型。
メンバー
パブリック コンストラクター
名前 |
説明 |
---|---|
コンストラクターです。 |
|
デストラクターです。 |
パブリック メソッド
名前 |
説明 |
---|---|
既存のポインターの所有権を持つようにこのメソッドを呼び出します。 |
|
ポインターの所有権を解放するためにこのメソッドを呼び出します。 |
|
指すにオブジェクトを CAutoPtr削除するには、このメソッドを呼び出します。 |
パブリック演算子
名前 |
説明 |
---|---|
キャスト演算子。 |
|
代入演算子です。 |
|
ポインターメンバー演算子。 |
パブリック データ メンバー
名前 |
説明 |
---|---|
ポインターのデータ メンバー変数。 |
解説
このクラスは自動的にリソースを解放することによって、範囲からメモリ リークする場合に対して保護するスマート ポインターを作成および管理するためのメソッドを提供します。
さらに、CAutoPtr のコピー コンストラクターと代入演算子は、コピー先のポインターにソースのポインターをコピーし、NULL にソースのポインターを置くポインターの所有権を譲渡されます。したがって、同じポインターを格納 CAutoPtr の 2 種類のオブジェクトを個別に設定することはできなくなります。これにより、同じポインターを回削除する可能性が減少します。
CAutoPtr は、ポインターのコレクションを簡単に作成できます。コレクション クラスを取得し、デストラクターをオーバーライドする代わりに、CAutoPtr のオブジェクトのコレクションを行いやすくなります。コレクションが削除されるとき、CAutoPtr のオブジェクトがスコープ外に出て、自動的に自分自身を削除します。
CHeapPtr とバリアントは CAutoPtrと同じように動作します。ただし、C++ new と delete の演算子の代わりに異なるヒープ関数を使用してメモリの割り当てと解放します。CAutoVectorPtr は CAutoPtrのメモリの割り当てと解放するに vector new[] と vector delete[] を使用することにある唯一の違いに似ています。
スマート ポインターの配列またはリストが要求されると CAutoPtrArray と CAutoPtrList を参照してください。
必要条件
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;
}