記憶體管理:範例
本文說明 MFC 如何針對三種一般記憶體配置執行框架配置和堆積配置:
配置位元組陣列
在畫面上配置位元組陣列
定義陣列,如下列程式碼所示。 當陣列變數結束其範圍時,會自動刪除陣列及其記憶體回收。
{ 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];
從堆積解除配置陣列
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 }
結構所佔用的記憶體會在結束其範圍時回收。
在堆積上配置資料結構
使用
new
來配置堆積上的資料結構並delete
解除配置,如下列範例所示:// 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
使用 運算子可傳回物件的指標,在堆積上設定物件。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");