Appel explicite d’un destructeur

Il n’est pas possible d’appeler explicitement un constructeur (il faut passer par une initialisation), mais on peut appeler explicitement un destructeur.

Il s’agit d’une technique un peu spéciale pour programmeurs chevronnés. Elle est basée sur le fait que l’on peut créer un objet qui ne réserve pas de place mémoire. Voici un exemple :

static char tampon[sizeof(exemple)];exemple *pex = (exemple*) tampon;   // pas de place occupée dans le tas

Ici la variable pointée par pex est donc logée dans le tampon, et non dans le tas ; on suppose de plus qu’il n’est pas nécessaire d’appeler un constructeur (ce qui n’est guère prudent, mais peut marcher si la classe utilise le constructeur par défaut standard).

Comme pex n’est pas dans le tas, il ne faut surtout pas appeler delete avec pex, car on risquerait des ennuis. Pour appeler le destructeur, il faut donc un appel explicite, avec le nom complet :

pex->exemple::~exemple();

Nous verrons au chapitre 7 un autre exemple basé sur une redéfinition de l’opérateur new.

Précédent Précédent Sommaire Sommaire Suivant Suivant