Megosztás a következőn keresztül:


Memóriakezelés: Példák

Megjegyzés:

A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Ez a cikk azt ismerteti, hogyan hajtja végre az MFC a keretlefoglalásokat és a halomfoglalásokat a memórialefoglalások három tipikus típusához:

Bájttömb lefoglalása

Bájttömb lefoglalása a kereten

  1. Adja meg a tömböt az alábbi kódban látható módon. A rendszer automatikusan törli a tömböt, és a rendszer visszanyeri a memóriáját, amikor a tömbváltozó kilép a hatóköréből.

    {
    const int BUFF_SIZE = 128;
    
    // Allocate on the frame
    char myCharArray[BUFF_SIZE];
    int myIntArray[BUFF_SIZE];
    // Reclaimed when exiting scope 
    }
    

Bájttömb (vagy bármilyen primitív adattípus) lefoglalása a halomon

  1. Használja az operátort new a példában látható tömbszintaxissal:

    const int BUFF_SIZE = 128;
    
    // Allocate on the heap
    char* myCharArray = new char[BUFF_SIZE];
    int* myIntArray = new int[BUFF_SIZE];
    

A tömbök felszabadítása a halomból

  1. Használja a delete operátort az alábbiak szerint:

    delete[] myCharArray;
    delete[] myIntArray;
    

Adatstruktúra lefoglalása

Adatstruktúra lefoglalása a keretben

  1. Adja meg a struktúraváltozót az alábbiak szerint:

    struct MyStructType { int topScore; };
    void MyFunc()
    {
       // Frame allocation
       MyStructType myStruct;
    
       // Use the struct 
       myStruct.topScore = 297;
    
       // Reclaimed when exiting scope
    }
    

    A struktúra által elfoglalt memória felszabadul, amikor kilép a hatóköréből.

Adatstruktúrák lefoglalása a halomra

  1. Használja a new a halom adatstruktúráinak lefoglalására, és a delete azok felszabadítására, ahogy az alábbi példák is szemléltetik.

    // Heap allocation
    MyStructType* myStruct = new MyStructType;
    
    // Use the struct through the pointer ...
    myStruct->topScore = 297;
    
    delete myStruct;
    

Objektum hozzárendelése

Objektum lefoglalása a kereten

  1. Deklarálja az objektumot az alábbiak szerint:

    {
    CMyClass myClass;     // Automatic constructor call here
    
    myClass.SomeMemberFunction();     // Use the object
    }
    

    Az objektum destruktorát a rendszer automatikusan meghívja, amikor az objektum kilép a hatóköréből.

Objektum lefoglalása a halomra

  1. Az new operátort, amely egy objektumra mutat, használja az objektumok halomra történő lefoglalásához. A delete operátort használva törölheti őket.

    Az alábbi halom- és keretes példák feltételezik, hogy a CPerson konstruktor nem vesz fel argumentumokat.

    // Automatic constructor call here
    CMyClass* myClass = new CMyClass;
    
    myClass->SomeMemberFunction();  // Use the object
    
    delete myClass;  // Destructor invoked during delete
    

    Ha a CPerson konstruktor argumentuma egy mutató a char-ra, akkor a keretfoglalási utasítás a következő:

    CMyClass myClass("Joe Smith");
    

    A halomfoglalásra vonatkozó utasítás a következő:

    CMyClass* myClass = new CMyClass("Joe Smith");
    

Lásd még

Memóriakezelés: Halomfoglalás