記憶體管理: 範例
這份文件說明 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");