Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Knihovna MFC (Microsoft Foundation Classes) se nadále podporuje. Už ale nepřidáme funkce ani aktualizujeme dokumentaci.
Tento článek popisuje, jak MFC provádí přidělování rámců a přidělení haldy pro každý ze tří typických druhů přidělení paměti:
Alokace pole bajtů
Přidělení pole bajtů v rámci
Definujte pole, jak je znázorněno následujícím kódem. Pole se automaticky odstraní a jeho paměť se uvolní, když proměnná pole opustí svůj obor platnosti.
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
Přidělení pole bajtů (nebo jakéhokoli primitivního datového typu) v haldě
newPoužijte operátor se syntaxí pole znázorněnou 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];
Uvolnit pole z haldy
deleteOperátor použijte následujícím způsobem:delete[] myCharArray; delete[] myIntArray;
Přidělení datové struktury
Přidělit datovou strukturu na snímku
Definujte proměnnou struktury 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ěť, kterou obsadila struktura, se uvolní, když opustí svůj obor působnosti.
Přidělit datové struktury na haldě
Slouží
newk přidělování datových struktur v haldě adeletek jejich uvolnění, jak je znázorněno v následujících příkladech:// 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 rámu
Deklarujte objekt následujícím způsobem:
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }Destruktor objektu se automaticky vyvolá při opuštění jeho oboru platnosti.
Přidělit objekt na haldě
Použijte operátor
new, který vrátí ukazatel na objekt, k přidělení objektů na haldě. Pomocí operátorudeleteje odstraňte.Následující příklady haldy a rámce předpokládají, že
CPersonkonstruktor nepřijímá žádné argumenty.// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during deletePokud je argumentem konstruktoru
CPersonukazatel nachar, příkaz pro přidělení rámce je:CMyClass myClass("Joe Smith");Příkaz pro přidělení haldy je:
CMyClass* myClass = new CMyClass("Joe Smith");