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