Bonjour,
ma classe point a pour constructeur point ( float, float )
quand est ce que je dois utiliser un destructeur ~point( ) ? j'ai essayé de chercher un peu mais pas de résultat satisfaisant.
Merci d'avance
Version imprimable
Bonjour,
ma classe point a pour constructeur point ( float, float )
quand est ce que je dois utiliser un destructeur ~point( ) ? j'ai essayé de chercher un peu mais pas de résultat satisfaisant.
Merci d'avance
Si t'a des ressources à libérer. (allocation dynamique etc).
Enfin faut clarifier. Tu parles de le définir ou de l'appeller explicitement?
Quand est ce que je dois le définir ?
-> Est ce que à chaque fois qu'on définit un constructeur, il faut systematiquement définir un destructeur par la suite ?
->Si oui, quand est ce qu'on l'appelle explicitement ?
Non.
Par défaut, le langage en génère un pour toi qui fait peut-être ce qui est nécessaire. Si tel est le cas, autant laisser faire le langage.
Si ta classe gère manuellement et directement des ressources (des new, des fonctions systèmes pour créer des sémaphores, des locks...), il sera nécessaire d'avoir un destructeur pour libérer les ressources allouées. Il sera aussi souvent nécessaire de bien réfléchir à ce qui va se passer pour ces ressources lors d'une copie d'une instance (ou empêcher cette copie).
Avoir besoin de trop définir de destructeurs dans son code est généralement un signe qu'on utilise directement trop de fonctions bas niveau, qui demande de gérer directement des ressources, alors qu'en règle générale, en C++, on encapsule ces ressources dans des classes pour en faciliter la gestion.
Jamais. Ou presque.
Le destructeur est appelé automatiquement par le langage quand une variable sur la pile est détruite.
Pour une langage pas sur la pile (on l'a crée avec new), le destructeur est appelé par le langage lorsqu'on fait delete sur la variable.Code:
1
2
3
4 { X x(...); // On travaille avec x } // x est détruit. Le destructeur est appelé automatiquement.
Seul cas (mais absolument pas orienté débutant, et assez rare) : Quand on a utilisé un placement new, il faut généralement appeler explicitement le destructeur.Code:
1
2
3
4
5 { X *x = new X(...); // On travaille avec x delete x; // on détruit x. Le destructeur est appelé. }
Le detructeur est appellé le plus souvent implicitement