CAutoPtr クラス
このクラスは、スマート ポインター オブジェクトを表します。
template<
typename T
>
class CAutoPtr
パラメーター
- T
ポインター型。
解説
このクラスには、スマート ポインターを作成し、管理するメソッドが用意されています。このメソッドは、スコープ外に出たリソースを解放し、メモリ リークを防ぎます。
さらに、CAutoPtr のコピー コンストラクターと代入演算子は、ポインターを別のポインターにコピーし、元のポインターに NULL を設定することにより、ポインターの所有権を転送します。 これにより、同じポインターを 2 つの CAutoPtr オブジェクトに格納できなくなるため、同じポインターを 2 度削除する可能性を減らすことができます。
また、CAutoPtr によって、ポインターのコレクションの作成を簡単に行うことができます。 コレクション クラスを派生し、デストラクターをオーバーライドするよりも、CAutoPtr オブジェクトのコレクションを作成する方が簡単です。 コレクションを削除すると、CAutoPtr オブジェクトはスコープからはずれ、自動的に削除されます。
メモリの割り当てと解放を行うときに、C++ の new 演算子と delete 演算子ではなく別のヒープ関数を使用する点を除けば、CHeapPtr とバリアントは、CAutoPtr と同じ動作をします。 メモリの割り当ておよび解放に vector new[] および vector delete[] を使用する点を除けば、CAutoVectorPtr は CAutoPtr とよく似ています。
スマート ポインターの配列またはリストが必要な場合は、「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;
}