Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Libère un bloc de mémoire.
Syntaxe
[
::
]delete
cast-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 l’opérateur new. L’opérateur delete
a un résultat de type void
et ne retourne par conséquent aucune valeur. Par exemple :
CDialog* MyDialog = new CDialog;
// use MyDialog
delete MyDialog;
L’utilisation de delete
sur un pointeur vers un objet non alloué avec new
donne des résultats imprévisibles. Toutefois, vous pouvez utiliser delete
sur un pointeur avec la valeur 0. Cette clause signifie que, lorsque new
retourne 0 en cas d’échec, la suppression du résultat d’une opération new
ayant échoué ne présente aucun danger. Pour plus d’informations, consultez Les opérateurs new et delete.
Les opérateurs new
et delete
peuvent également être utilisés pour les types intégrés, y compris les tableaux. Si pointer
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.
Quand delete
est utilisé pour libérer la mémoire pour un objet de classe C++, le destructeur de l’objet est appelé avant la libération de la mémoire de l’objet (si l’objet a un destructeur).
Si l’opérande vers l’opérateur delete
est une l-value modifiable, sa valeur n’est pas définie une fois l’objet supprimé.
Si l’option du compilateur /sdl (Activer des vérifications de sécurité supplémentaires) est spécifiée, l’opérande vers l’opérateur delete
est défini sur une valeur non valide après la suppression de l’objet.
Utilisation de delete
Il existe deux variantes syntaxiques pour l’opérateur delete : une pour les objets uniques, l’autre pour les tableaux d’objets. Le fragment de code suivant illustre leurs différences :
// 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 génèrent des résultats indéfinis : en utilisant le formulaire du tableau delete (delete []
) sur un objet et en utilisant le formulaire nonarray de delete sur un tableau.
Exemple
Pour obtenir des exemples d’utilisation de delete
, consultez opérateur new.
Fonctionnement de delete
L’opérateur delete appelle la fonction opérateur delete.
Pour les objets n’étant pas du type de classe (class, struct ou union), l’opérateur delete global est appelé. Pour les objets du type classe, le nom de la fonction de désallocation est résolu dans la portée globale si l’expression de supprimer commence par l’opérateur de résolution de portée 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