Udostępnij za pośrednictwem


Zarządzanie pamięcią: przykłady

W tym artykule opisano, jak MFC wykonuje ramki Alokacje sterty i dla każdego z trzech typowe rodzaje alokacji pamięci:

  • Tablica bajtów

  • Struktura danych

  • Obiekt

Alokacja tablicę bajtów

Aby przydzielić tablicę bajtów w ramce

  • Definiowanie tablicy, jak pokazano w następującym kodzie.Tablica jest automatycznie usuwany, a jego pamięci odzyskane zmiennej tablicy, kiedy jej zakresu.

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

Aby przydzielić tablicę bajtów (lub dowolnego typu danych pierwotnych) na stercie

  • Użyj Nowy operatora z składnia tablicy w poniższym przykładzie:

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

Aby cofnąć tablice ze sterty

  • Użyj usunąć operatora w następujący sposób:

    delete [] myCharArray;
    delete [] myIntArray;
    

Alokacja struktury danych

Aby zaalokować strukturę danych w ramce

  • Definiowanie zmiennej struktury w następujący sposób:

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

    Pamięć zajmowanych przez struktury jest regeneracji, kiedy to jej zakresu.

Aby przydzielić struktur danych na stercie

  • Użyj Nowy przydzielić struktur danych na stercie i usunąć należy cofnąć, jak pokazano w poniższych przykładach:

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

Alokacja obiektu

Aby przydzielić obiektu w ramce

  • Obiekt należy zadeklarować w następujący sposób:

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

    Destruktora dla obiektu jest automatycznie wywoływane, kiedy obiekt jego zakres.

Aby przydzielić obiektu na stercie

  • Użyj Nowy operator, który zwraca wskaźnik do obiektu, przydzielić obiektów na stercie.Użyj usunąć operatora, aby je usunąć.

    Następujące przykłady sterty i ramki zakładać, że CPerson konstruktora nie przyjmuje żadnych argumentów.

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

    Jeśli argument dla CPerson Konstruktor jest wskaźnik do char, instrukcja alokacji ramki jest:

    CMyClass myClass("Joe Smith");
    

    Instrukcja dla alokacji sterty jest:

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

Zobacz też

Koncepcje

Zarządzanie pamięcią: Alokację sterty.