L'opérateur delete
détruit un objet créé par un
new
. On ne peut détruire un pointeur sur constante.
Il a une syntaxe particulière pour la destruction des
tableaux.
void f(){ int *pi=new int; int i; delete pi; //libere l'allocation pi=&i; delete pi; // non!!! pi=new int[16]; delete pi; // dangereux delete [] pi; //ok les 16 emplacements sont libérés }De même que pour le
new
, le delete
appelle
l'opérateur delete()
. Dans le cas d'un objet d'une
classe T
ayant un T::operator delete()
c'est cet opérateur qui sera appelé, sinon l'opérateur
global.
Il faut obligatoirement libérer l'espace alloué par un new T []
par un delete []. En fait ce ne sont pas les mêmes opérateurs
qui sont appelés dans les deux cas (cf. chapitre sur les classes).
Contrairement au new, l'opérateur delete ne peut être
surchargé.