メモリ管理 : 例
この技術情報では、 MFC がメモリ割り当ての 3 種類の一般的な種類のゾーンのアロケーションおよびヒープ割り当てを実行する方法を記述します:
バイトの配列
データ構造
オブジェクト。
バイトの配列のアロケーション
ゾーンのバイトの配列を割り当てます。
次のコードに示すように、配列を定義します。配列は自動的に削除され、メモリは配列変数がスコープを終了するときにクリアされます。
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
ヒープのバイト (またはプリミティブ データ型)の配列を割り当てます。
この例で示した配列構文の new 演算子の使用:
const int BUFF_SIZE = 128; // Allocate on the heap char* myCharArray = new char[BUFF_SIZE]; int* myIntArray = new int[BUFF_SIZE];
ヒープから配列を解放します。
次のよう 削除(&&D),削除,DELETE,Delete 演算子の使用:
delete [] myCharArray; delete [] myIntArray;
データ構造のアロケーション
ゾーンのデータ構造を割り当てます。
次のような構造体変数を定義します:
struct MyStructType { int topScore; }; void MyFunc() { // Frame allocation MyStructType myStruct; // Use the struct myStruct.topScore = 297; // Reclaimed when exiting scope }
構造体によって占有されていたメモリはスコープを終了するときにクリアされます。
ヒープのデータ構造を割り当てます。
ヒープと 削除(&&D),削除,DELETE,Delete のデータ構造を次の例に示すように、を解放するために割り当てるために new の使用:
// Heap allocation MyStructType* myStruct = new MyStructType; // Use the struct through the pointer ... myStruct->topScore = 297; delete myStruct;
オブジェクトのアロケーション
ゾーンのオブジェクトを割り当てます。
次のようにオブジェクトを宣言します:
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }
オブジェクトのデストラクターが自動的にオブジェクトがスコープを終了するときに呼び出されます。
ヒープのオブジェクトを割り当てます。
オブジェクトへのポインターを返すヒープのオブジェクトを割り当てるために new 演算子を使用します。コントロールを削除するには 削除(&&D),削除,DELETE,Delete 演算子を使用します。
次のヒープとゾーンの例は CPerson のコンストラクターが引数を受け取らないと仮定します。
// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during delete
CPerson のコンストラクターの引数が charへのポインター、ゾーンのアロケーションのステートメントは次のとおりです:
CMyClass myClass("Joe Smith");
ヒープ割り当てのステートメントは次のとおりです:
CMyClass* myClass = new CMyClass("Joe Smith");