Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo descreve como o MFC executa alocações de quadros e alocações de heap para cada um dos três tipos típicos de alocações de memória:
Alocação de uma matriz de bytes
Para alocar uma matriz de bytes no quadro
Defina a matriz conforme mostrado pelo código a seguir. A matriz é excluída automaticamente e sua memória recuperada quando a variável de matriz sai de 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 primitivo) no montão
Use o
newoperador 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 da pilha
Use o
deleteoperador da seguinte maneira:delete[] myCharArray; delete[] myIntArray;
Alocação de uma estrutura de dados
Para alocar uma estrutura de dados no quadro
Defina a variável de estrutura da seguinte forma:
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 é libertada quando ela sai do seu escopo.
Para alocar estruturas de dados no heap
Use
newpara alocar estruturas de dados no heap edeletepara desalocar estruturas de dados, conforme mostrado pelos 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 do objeto é invocado automaticamente quando o objeto sai de seu escopo.
Para alocar um objeto na pilha
Use o
newoperador, que retorna um ponteiro para o objeto, para alocar objetos no heap. Utilize odeleteoperador para excluí-los.Os exemplos de heap e frame a seguir assumem que o
CPersonconstrutor não usa argumentos.// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during deleteSe o argumento para o
CPersonconstrutor for um ponteiro parachar, a instrução para alocação de quadro é:CMyClass myClass("Joe Smith");A declaração para alocação de heap é:
CMyClass* myClass = new CMyClass("Joe Smith");