Administración de memoria: ejemplos
En este artículo se describe cómo MFC realiza asignaciones de marco y las asignaciones de pila para cada uno de los tres tipos habituales de asignaciones de memoria:
Una matriz de bytes
Una estructura de datos
Objeto
Asignación de una matriz de bytes
Para asignar una matriz de bytes en el cuadro
Defina la matriz como se muestra en el código siguiente.La matriz se elimina automáticamente y su memoria se recupera cuando desapareciese la variable de matriz su ámbito.
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
Para asignar una matriz de bytes (o de cualquier tipo de datos primitivo) de la pila
Utilice el operador de new con la sintaxis de matriz mostrada en este ejemplo:
const int BUFF_SIZE = 128; // Allocate on the heap char* myCharArray = new char[BUFF_SIZE]; int* myIntArray = new int[BUFF_SIZE];
Para desasignar matrices de pila
Utilice el operador de delete como sigue:
delete [] myCharArray; delete [] myIntArray;
Asignación de una estructura de datos
Para asignar una estructura de datos en el cuadro
Defina la variable de estructura como sigue:
struct MyStructType { int topScore; }; void MyFunc() { // Frame allocation MyStructType myStruct; // Use the struct myStruct.topScore = 297; // Reclaimed when exiting scope }
La memoria ocupada por la estructura se recupera cuando sale del ámbito.
Para asignar las estructuras de datos en la pila
Utilice new para asignar las estructuras de datos en la pila y delete para desasignarlos, como se muestra en los ejemplos siguientes:
// Heap allocation MyStructType* myStruct = new MyStructType; // Use the struct through the pointer ... myStruct->topScore = 297; delete myStruct;
Asignación de un objeto
Para asignar un objeto en el cuadro
Declare el objeto como sigue:
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }
El destructor del objeto automáticamente se invoca cuando finaliza el objeto su ámbito.
Para asignar un objeto en el montón
Utilice el operador de new , que devuelve un puntero al objeto, para asignar objetos en el montón.Utilice el operador de delete para eliminarlos.
Los ejemplos siguientes de la pila y el cuadro se supone que el constructor de CPerson no toma ningún argumento.
// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during delete
Si el argumento del constructor de CPerson es un puntero a char, la instrucción para la asignación del cuadro es:
CMyClass myClass("Joe Smith");
La instrucción para la asignación de pila es:
CMyClass* myClass = new CMyClass("Joe Smith");