Compartir a través de


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

Vea también

Conceptos

Administración de memoria: Asignación de pila