delete, opérateur (C++)
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 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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour