次の方法で共有


メモリ管理 : 例

この技術情報では、 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");
    

参照

概念

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