Správa paměti: Příklady
Tento článek popisuje, jak MFC provede rámec přiřazení a přidělení haldy pro všechny tři druhy typické přidělení paměti:
Pole bajtů
Datová struktura
Objekt
Přidělení pole bajtů
Přidělit matici bajtů na rámec
Pole definujte, jak je ukázáno v následujícím kódu.Pole je automaticky odstraněn a své paměti uvolněn při ukončení proměnnou 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ělit matici bajtů (nebo jakýkoli primitivní typ datového) na haldě
Použití nové operátor pomocí syntaxe pole uvedeno v následujícím 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
Datová struktura na rámeček vyhradit
Definujte strukturu proměnné následujícím způsobem:
struct MyStructType { int topScore; }; void MyFunc() { // Frame allocation MyStructType myStruct; // Use the struct myStruct.topScore = 297; // Reclaimed when exiting scope }
Paměti obsazené ovladačem struktura je uvolněno při jejím ukončení působnosti.
Chcete-li přidělit struktury dat na haldě
Použití nové přidělit datových struktur na haldě a Odstranit Chcete-li 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;
Rozdělení objektu
Chcete-li přidělit objekt na snímku
Deklarujte objekt takto:
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }
Destruktor objektu je automaticky vyvoláno objekt ukončí její oblasti působnosti.
Pro přidělení objektu na haldě
Použití nové operátor, který vrací ukazatel na objekt, chcete-li přidělit objekty do haldy.Použití Odstranit operátor k jejich odstranění.
Následující příklady haldy a rámce předpokládá, že CPerson konstruktor nepřijímá žádné argumenty.
// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during delete
Pokud argument CPerson konstruktoru je ukazatel na char, je příkaz pro přidělení rámce:
CMyClass myClass("Joe Smith");
Příkaz pro přidělení haldy je:
CMyClass* myClass = new CMyClass("Joe Smith");