Správa paměti: Příklady
Tento článek popisuje, jak MFC provádí každé tři typické druhy přidělení paměti pro přidělení rámce a přidělení haldy
Pole bajtů
Struktura dat
Objekt
Přidělení pole bajtů
K přidělení pole bajtů na snímku
Pole definujte, jak ukazuje následující kód.Pole je automaticky odstraněn a jeho paměti požadovaná při ukončení proměnné pole působnosti.
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
Přidělení haldy na pole bajtů (nebo libovolný primitivní datový typ)
Použití nové operátor syntaxe pole v tomto příkladu:
const int BUFF_SIZE = 128; // Allocate on the heap char* myCharArray = new char[BUFF_SIZE]; int* myIntArray = new int[BUFF_SIZE];
Chcete-li navrátit matice z haldy
Použití Odstranit operátor takto:
delete [] myCharArray; delete [] myIntArray;
Přidělení datové struktury
Přidělit struktury dat na snímku
Definujte strukturu proměnné takto:
struct MyStructType { int topScore; }; void MyFunc() { // Frame allocation MyStructType myStruct; // Use the struct myStruct.topScore = 297; // Reclaimed when exiting scope }
Paměti obsazené struktura je uvolněno při jeho ukončení jeho rozsah.
Přidělit struktury dat na haldy
Použití nové přidělit struktury dat na haldy a Odstranit se navrátit, jak ukazují následující příklady:
// Heap allocation MyStructType* myStruct = new MyStructType; // Use the struct through the pointer ... myStruct->topScore = 297; delete myStruct;
Přidělení objektu
Pro přidělení objektu na snímku
Objekt Deklarujte takto:
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }
Destructor objektu je automaticky vyvoláno objekt opustí oblast jeho působnosti.
Přidělení haldy na objekt
Použití nové operátor, který vrací ukazatel na objekt, přidělení haldy objekty.Použití Odstranit operátor je odstranit.
Následující příklady haldy a rámec předpokládají, že CPerson konstruktor nevyžaduje žádné argumenty.
// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during delete
Pokud argument pro CPerson konstruktoru je ukazatel na char, je příkaz pro přidělení rámeček:
CMyClass myClass("Joe Smith");
Příkaz pro přidělení haldy je:
CMyClass* myClass = new CMyClass("Joe Smith");