next up previous
Next: Constructeurs Up: Les classes Previous: Constructeur par défaut

Destructeur par défaut

Il existe de même une fonction membre, le destructeur, qui est appelée automatiquement pour détruire un objet à la fin du bloc dans lequel il a été déclaré (de même que l'on détruit les variables locales à un bloc à la fin du bloc). Par défaut, il se contente de détruire les différents champs. Si l'un des champs est un objet d'une certaine classe, il appelle le destructeur de cette classe sur ce champ. Il peut également être précisé (c-à-d redéfini dans la classe). Par convention, son nom est un tilde (~) suivi du nom de la classe, et il ne renvoie rien. Il doit également être public. Dans notre cas, il sera très utile pour désallouer le tableau tab, car en effet, détruire la variable double* tab ne libère pas le tableau qui est pointé par tab si celui-ci a été alloué, mais au contraire se contente d'effacer le pointeur. Préciser la désallocation du tableau dans le destructeur permet de ne pas avoir à le faire manuellement pour chacune des variables de type Tableau définie dans le code !

class Tableau {

  double* tab;
  int n;

 public: 

  Tableau(){
    n = 0;
  }

  ~Tableau(){
    if (n != 0)
      delete[] tab;
  }

  // autres champs et fonctions membres

};

Le destructeur est appelé automatiquement quand le bloc dans lequel l'objet a été déclaré se termine. Il est impossible de faire en sorte qu'il ne soit pas appelé à ce moment-là, ou de l'appeler manuellement par son nom.

Dans le cas particulier du retour d'une fonction, l'objet renvoyé par return est soit directement transmis là où la fonction a été appelée, sans appel au destructeur (il est alors considéré comme local non pas à la fonction mais à l'endroit du code où la fonction a été appelée), soit il est d'abord recopié dans une nouvelle variable (qui elle est considérée comme locale à l'endroit où la fonction a été appelée) et ensuite détruit par appel au destructeur.


next up previous
Next: Constructeurs Up: Les classes Previous: Constructeur par défaut
Guillaume Charpiat 2006-12-07