18 new et delete
Jusqu'à maintenant la seule manière d'allouer de la mémoire qui a été
présentée, était de définir une variable ou un tableau. La gestion de ces
emplacements est automatique : une variable locale est créée puis détruite
à la sortie du bloc d'instructions englobant, cela correspond à la durée de
vie de la variable. Il est possible d'allouer et de désallouer de la
mémoire sans dépendre la durée de vie des variables : c'est le rôle des
instructions new et delete:
-
·
``new type;'' alloue un espace mémoire capable de contenir un
objet de type type et retourne l'adresse ce cette zone mémoire qui peut
être stockée dans un pointeur.
- · ``P = new type[N];'' alloue un espace mémoire
capable de contenir N objets de type type et retourne l'adresse de cette
zone mémoire. On parle de tableaux dynamiques que l'on manipule de la même
manière que les tableaux de base (voir 17).
- · ``delete P;'' désalloue l'espace mémoire
d'adresse P. Si cette zone correspond à un ensemble d'éléments (alloués
par new type [N]), il faut utiliser ``delete []
P;'' sauf si type est un type élémentaire.
Les zones allouées par new ne seront désallouées que par l'appel
de delete : la gestion de la mémoire devient votre
responsabilité... gare aux fuites de mémoires !