Partager via


Gestion de la mémoire : exemples

Cet article décrit comment MFC effectue les allocations de frame et les allocations de tas pour chacun des trois types d’allocations de mémoire classiques :

Allocation d’un tableau d’octets

Pour allouer un tableau d’octets sur le frame

  1. Définissez le tableau comme indiqué par le code suivant. Le tableau est automatiquement supprimé et sa mémoire récupérée lorsque la variable de tableau quitte son étendue.

    {
    const int BUFF_SIZE = 128;
    
    // Allocate on the frame
    char myCharArray[BUFF_SIZE];
    int myIntArray[BUFF_SIZE];
    // Reclaimed when exiting scope 
    }
    

Pour allouer un tableau d’octets (ou tout type de données primitif) sur le tas

  1. Utilisez l’opérateur new avec la syntaxe de tableau indiquée dans cet exemple :

    const int BUFF_SIZE = 128;
    
    // Allocate on the heap
    char* myCharArray = new char[BUFF_SIZE];
    int* myIntArray = new int[BUFF_SIZE];
    

Pour libérer les tableaux à partir du tas

  1. Utilisez l’opérateur delete comme suit :

    delete[] myCharArray;
    delete[] myIntArray;
    

Allocation d’une structure de données

Pour allouer une structure de données sur le frame

  1. Définissez la variable de structure comme suit :

    struct MyStructType { int topScore; };
    void MyFunc()
    {
       // Frame allocation
       MyStructType myStruct;
    
       // Use the struct 
       myStruct.topScore = 297;
    
       // Reclaimed when exiting scope
    }
    

    La mémoire occupée par la structure est récupérée lorsqu’elle quitte sa portée.

Pour allouer des structures de données sur le tas

  1. Permet new d’allouer des structures de données sur le tas et delete de les libérer, comme illustré par les exemples suivants :

    // Heap allocation
    MyStructType* myStruct = new MyStructType;
    
    // Use the struct through the pointer ...
    myStruct->topScore = 297;
    
    delete myStruct;
    

Allocation d’un objet

Pour allouer un objet dans le cadre

  1. Déclarez l’objet comme suit :

    {
    CMyClass myClass;     // Automatic constructor call here
    
    myClass.SomeMemberFunction();     // Use the object
    }
    

    Le destructeur de l’objet est automatiquement appelé lorsque l’objet quitte son étendue.

Pour allouer un objet dans le tas

  1. Utilisez l’opérateur new , qui retourne un pointeur vers l’objet, pour allouer des objets sur le tas. Utilisez l’opérateur delete pour les supprimer.

    Les exemples de tas et de cadres suivants supposent que le constructeur CPerson n’accepte aucun argument.

    // Automatic constructor call here
    CMyClass* myClass = new CMyClass;
    
    myClass->SomeMemberFunction();  // Use the object
    
    delete myClass;  // Destructor invoked during delete
    

    Si l’argument du CPerson constructeur est un pointeur vers char, l’instruction pour l’allocation de trame est :

    CMyClass myClass("Joe Smith");
    

    La syntaxe pour l’allocation de tas est la suivante :

    CMyClass* myClass = new CMyClass("Joe Smith");
    

Voir aussi

Gestion de la mémoire : allocation de tas