Správa paměti: Příklady

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

  1. 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ě

  1. new Použ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

  1. delete Operá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

  1. 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ě

  1. Slouží new k přidělování datových struktur v haldě a delete k 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

  1. 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ě

  1. Použijte operátor new, který vrátí ukazatel na objekt, k přidělení objektů na haldě. Pomocí operátoru delete je odstraňte.

    Následující příklady haldy a rámce předpokládají, ž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 je argumentem konstruktoru CPerson ukazatel na char, 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");
    

Viz také

Správa paměti: Přidělení haldy