Sdílet prostřednictvím


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");
    

Viz také

Koncepty

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