Gestione della memoria: esempi
In questo articolo viene descritto come MFC esegue le allocazioni e le allocazioni heap il frame per ciascuno dei tre tipi comuni di allocazioni di memoria:
Una matrice di byte
Una struttura di dati
Un oggetto
Allocazione di una matrice di byte
Per allocare una matrice di byte sul frame
Definire la matrice come illustrato nel codice seguente.La matrice verrà automaticamente eliminato e la memoria viene recuperata quando la variabile di matrice esce dal relativo ambito.
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
Per allocare una matrice di byte (o qualsiasi tipo di dati primitivo) nell'heap
Utilizzare l'operatore di new con la sintassi delle matrici illustrata in questo esempio:
const int BUFF_SIZE = 128; // Allocate on the heap char* myCharArray = new char[BUFF_SIZE]; int* myIntArray = new int[BUFF_SIZE];
Per rilasciare le matrici dall'heap
Utilizzare l'operatore delete come segue:
delete [] myCharArray; delete [] myIntArray;
Allocazione di una struttura di dati
Per allocare una struttura di dati sul frame
Definire la variabile di struttura come segue:
struct MyStructType { int topScore; }; void MyFunc() { // Frame allocation MyStructType myStruct; // Use the struct myStruct.topScore = 297; // Reclaimed when exiting scope }
La memoria occupata dalla struttura viene recuperata quando si esce dal relativo ambito.
Per allocare le strutture dei dati nell'heap
Utilizzare new per allocare le strutture dei dati sull'heap e su delete per rilasciarli, come illustrato negli esempi seguenti:
// Heap allocation MyStructType* myStruct = new MyStructType; // Use the struct through the pointer ... myStruct->topScore = 297; delete myStruct;
Allocazione di un oggetto
Per allocare un oggetto sul frame
Dichiarare l'oggetto come segue:
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }
Il distruttore dell'oggetto viene richiamato quando l'abbandono il relativo ambito.
Per allocare un oggetto nell'heap
Utilizzare l'operatore di new , che restituisce un puntatore all'oggetto, allocare gli oggetti nell'heap.Utilizzare l'operatore delete per eliminarli.
Negli esempi di frame e dell'heap si presuppone che nel costruttore di CPerson non accetta argomenti.
// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during delete
Se l'argomento del costruttore di CPerson è un puntatore a char, l'istruzione per l'allocazione di frame è:
CMyClass myClass("Joe Smith");
L'istruzione per l'allocazione per l'heap è:
CMyClass* myClass = new CMyClass("Joe Smith");