delete, opérateur (C++)

Libère un bloc de mémoire.

Syntaxe

[::] deletecast-expression
[::] delete []cast-expression

Notes

L’argument cast-expression doit être un pointeur vers un bloc de mémoire précédemment alloué pour un objet créé avec le nouvel opérateur. L’opérateur delete a un résultat de type void et ne retourne donc pas de valeur. Par exemple :

CDialog* MyDialog = new CDialog;
// use MyDialog
delete MyDialog;

L’utilisation delete d’un pointeur vers un objet non alloué donne new des résultats imprévisibles. Toutefois, vous pouvez utiliser delete sur un pointeur avec la valeur 0. Cette disposition signifie que, lorsqu’elle new retourne 0 en cas d’échec, la suppression du résultat d’une opération ayant échoué new est inoffensive. Pour plus d’informations, consultez Les opérateurs nouveaux et supprimés.

Les new opérateurs et delete les opérateurs peuvent également être utilisés pour les types intégrés, y compris les tableaux. Si pointer elle fait référence à un tableau, placez des crochets vides ([]) avant pointer:

int* set = new int[100];
//use set[]
delete [] set;

L’utilisation de l’opérateur delete sur un objet libère sa mémoire. Un programme qui déréférence un pointeur après la suppression de l'objet peut avoir des résultats imprévisibles ou se bloquer.

Lorsqu’il delete est utilisé pour libérer de la mémoire pour un objet de classe C++, le destructeur de l’objet est appelé avant que la mémoire de l’objet soit libérée (si l’objet a un destructeur).

Si l’opérande à l’opérateur delete est une valeur l-value modifiable, sa valeur n’est pas définie après la suppression de l’objet.

Si l’option du compilateur /sdl (Activer des case activée s de sécurité supplémentaires) est spécifiée, l’opérande à l’opérateur est défini sur une valeur non valide après la suppression de l’objetdelete.

Utilisation de delete

Il existe deux variantes syntactiques pour l’opérateur delete : une pour les objets uniques et l’autre pour les tableaux d’objets. Le fragment de code suivant montre comment ils diffèrent :

// expre_Using_delete.cpp
struct UDType
{
};

int main()
{
   // Allocate a user-defined object, UDObject, and an object
   //  of type double on the free store using the
   //  new operator.
   UDType *UDObject = new UDType;
   double *dObject = new double;
   // Delete the two objects.
   delete UDObject;
   delete dObject;
   // Allocate an array of user-defined objects on the
   // free store using the new operator.
   UDType (*UDArr)[7] = new UDType[5][7];
   // Use the array syntax to delete the array of objects.
   delete [] UDArr;
}

Les deux cas suivants produisent des résultats non définis : à l’aide de la forme de tableau de suppression (delete []) sur un objet et à l’aide de la forme nonarray de suppression sur un tableau.

Exemple

Pour obtenir des exemples d’utilisation delete, consultez un nouvel opérateur.

Fonctionnement de delete

L’opérateur delete appelle l’opérateur de fonction delete.

Pour les objets non de type de classe (classe, struct ou union), l’opérateur de suppression globale est appelé. Pour les objets de type de classe, le nom de la fonction de désallocation est résolu dans l’étendue globale si l’expression delete commence par l’opérateur de résolution d’étendue unaire (::). Sinon, l'opérateur delete appelle le destructeur pour un objet avant de désallouer la mémoire (si le pointeur n'est pas null). L'opérateur delete peut être défini pour chaque classe ; si cette définition n'existe pas pour une classe donnée, l'opérateur de suppression global est appelé. Si l'expression de suppression est utilisée pour désallouer un objet de classe dont le type statique a un destructeur virtuel, la fonction de désallocation est résolue par l'intermédiaire du destructeur virtuel du type dynamique de l'objet.

Voir aussi

Expressions avec opérateurs unaires
Mots clés
new et delete, opérateurs