次の方法で共有


メモリ管理 : 例

この記事では、MFC がフレーム割り当てとヒープ割り当てを実行する方法を、次の 3 つの一般的なメモリ割り当てそれぞれについて説明します。

バイト配列の割り当て

フレーム上でバイト配列を割り当てるには

  1. 次のコードに示すように、配列を定義します。 配列変数がスコープを終了すると、配列は自動的に削除され、そのメモリが解放されます。

    {
    const int BUFF_SIZE = 128;
    
    // Allocate on the frame
    char myCharArray[BUFF_SIZE];
    int myIntArray[BUFF_SIZE];
    // Reclaimed when exiting scope 
    }
    

ヒープ上でバイト配列 (または任意のプリミティブ データ型) を割り当てるには

  1. 次の例に示すように、配列構文で new 演算子を使用します。

    const int BUFF_SIZE = 128;
    
    // Allocate on the heap
    char* myCharArray = new char[BUFF_SIZE];
    int* myIntArray = new int[BUFF_SIZE];
    

ヒープから配列の割り当てを解除するには

  1. 次のように delete 演算子を使用します。

    delete[] myCharArray;
    delete[] myIntArray;
    

データ構造の割り当て

フレーム上でデータ構造を割り当てるには

  1. 次のように、構造体変数を定義します。

    struct MyStructType { int topScore; };
    void MyFunc()
    {
       // Frame allocation
       MyStructType myStruct;
    
       // Use the struct 
       myStruct.topScore = 297;
    
       // Reclaimed when exiting scope
    }
    

    構造体によって占有されているメモリは、そのスコープが終了すると解放されます。

ヒープ上でデータ構造を割り当てるには

  1. 次の例に示すように、new を使用してヒープ上でデータ構造を割り当て、delete を使用してその割り当てを解除します。

    // Heap allocation
    MyStructType* myStruct = new MyStructType;
    
    // Use the struct through the pointer ...
    myStruct->topScore = 297;
    
    delete myStruct;
    

オブジェクトの割り当て

フレーム上でオブジェクトを割り当てるには

  1. 次のように、オブジェクトを宣言します。

    {
    CMyClass myClass;     // Automatic constructor call here
    
    myClass.SomeMemberFunction();     // Use the object
    }
    

    オブジェクトのデストラクターは、オブジェクトがスコープを終了するときに自動的に呼び出されます。

ヒープ上でオブジェクトを割り当てるには

  1. オブジェクトへのポインターを返す new 演算子を使用して、ヒープ上でオブジェクトを割り当てます。 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");
    

関連項目

メモリ管理: ヒープ割り当て