Compartilhar via


Gerenciamento de memória: exemplos

Este artigo descreve como MFC executa alocações de quadro e alocações de heap para cada um dos três tipos típicos de alocações de memória:

  • Uma matriz de bytes

  • Uma estrutura de dados

  • Um objeto

Alocação de uma matriz de Bytes

Para alocar uma matriz de bytes no quadro

  • Defina matriz conforme mostrado pelo seguinte código.A matriz é excluída automaticamente e sua memória recuperada quando a variável de matriz sai seu escopo.

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

Para alocar uma matriz de bytes (ou qualquer tipo de dados primitivos) na pilha

  • Use o nova operador com a sintaxe de matriz mostrada neste exemplo:

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

Para desalocar as matrizes do heap

  • Use o Excluir operador da seguinte maneira:

    delete [] myCharArray;
    delete [] myIntArray;
    

Alocação de estrutura de dados

Para alocar uma estrutura de dados no quadro

  • Defina a variável de estrutura da seguinte maneira:

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

    A memória ocupada pela estrutura é recuperada quando sai seu escopo.

Para alocar estruturas de dados na pilha

  • Use nova para alocar estruturas de dados na pilha e Excluir para desalocar, conforme mostrado pelo seguintes exemplos:

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

Alocação de um objeto

Para alocar um objeto no quadro

  • Declare o objeto da seguinte maneira:

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

    O destruidor para o objeto é invocado automaticamente quando o objeto sai seu escopo.

Para alocar um objeto no heap

  • Use o nova operador, que retorna um ponteiro para o objeto, alocar objetos no heap.Use o Excluir operador excluí-los.

    Os exemplos de heap e quadro seguintes assumem que o CPerson construtor obtém sem argumentos.

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

    Se o argumento para o CPerson construtor é um ponteiro para char, a instrução para alocação do quadro é:

    CMyClass myClass("Joe Smith");
    

    A instrução de alocação de heap é:

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

Consulte também

Conceitos

Gerenciamento de memória: Alocação de Heap