Sdílet prostřednictvím


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

Viz také

Koncepty

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