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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 { X *x = new X(...); // On travaille avec x delete x; // on détruit x. Le destructeur est appelé. }
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Le detructeur est appellé le plus souvent implicitement
Partager