共用方式為


記憶體管理: 範例

這份文件說明 MFC 如何執行框架配置及堆積配置每個記憶體配置的三種一般類型:

  • 位元組陣列

  • 一種資料結構

  • 物件

位元組陣列配置

若要配置的框架上的位元組陣列

  • 定義陣列,如下列程式碼所示。將自動刪除陣列和陣列變數離開其範圍時,回收其記憶體。

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

若要在堆積上配置位元組 (或任何基本資料型別) 的陣列

  • 使用的陣列語法,在這個範例中所顯示的運算子:

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

若要解除陣列從堆積配置

  • 使用刪除 ,如下所示的運算子:

    delete [] myCharArray;
    delete [] myIntArray;
    

一種資料結構的配置

若要配置的框架上的資料結構

  • 定義的結構變數,如下所示:

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

    超出範圍時,就會回收,結構所佔用的記憶體。

若要配置在堆積上的資料結構

  • 使用 配置在堆積上的資料結構和 刪除要解除配置,如下列範例所示:

    // 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
    }
    

    當物件離開其範圍時,會自動叫用該物件的解構函式。

若要配置在堆積上物件

  • 使用運算子,可以傳回物件的指標,配置在堆積上的物件。使用刪除運算子來刪除它們。

    下列的堆積和框架範例假設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");
    

請參閱

概念

記憶體管理: 堆積配置