Поделиться через


Управление памятью. Примеры

В этом разделе описываются как MFC выполняет выделения кадра и выделения памяти для каждого из 3 типичных выделения памяти:

  • Массив байтов

  • Структура данных

  • Объект

Выделение массива байтов

Выбор массив байтов в кадре

  • Определите массив, как показано в следующем коде. Массив автоматически удаляется, и его освобождение памяти, если переменная массива не влияет на ее область.

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

Выбор массив байтов (или любой примитивный тип данных в куче)

  • Оператор новый с синтаксисом массива, показанный в следующем примере:

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

Отменить массивы из кучи

  • Оператор удалить следующим образом:

    delete [] myCharArray;
    delete [] myIntArray;
    

Выделение структуры данных

Выбор структуры данных в кадре

  • Определите переменную структуры следующим образом:

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

    Память занятая структурой фиксируется при ее не влияет на ее область.

Выбор структуры данных в куче

  • Используйте новый для выделения структуры данных в куче и удалить, чтобы отменить их, как показано в следующих примерах:

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

Выделение объектов

Выберите объект в кадре

  • Объявите объект следующим образом:

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

    Деструктор для объекта автоматически вызывается, когда объект покидает его области.

Выбор объекта в куче

  • Оператор новый, который возвращает указатель на объект, чтобы выделить объекты в куче. Оператор удалить для удаления их.

    В следующих примерах кучи и кадра высказывать конструктор CPerson не принимает аргументов.

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

    Если аргумент для конструктора CPerson указатель на char, выписка для выделения кадра выглядит следующим образом:

    CMyClass myClass("Joe Smith");
    

    Выписка для выделения кучи выглядит следующим образом:

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

См. также

Основные понятия

Управление памятью. Выделение кучи