class abstraite destrcteur virtuelle - C++ - Programmation
Marsh Posté le 28-05-2009 à 07:50:31
Ce n'est pas obligatoire, mais ça fait des effets très sale et un nid à fuite si on ne le fait pas :
http://www.cppfrance.com/codes/UTI [...] 39755.aspx
Marsh Posté le 28-05-2009 à 08:17:33
et dans le cas d'une interface, avec que des virtual pur, il faut aussi déclarrer ler destructeur virtual pur ?
Marsh Posté le 28-05-2009 à 09:35:48
il faut mieux déclarer protected ??
Marsh Posté le 28-05-2009 à 10:00:20
un destructeur n'a pas de visibilité, il a pas a etre appelé explicitement
Et je vois pas pourquoi ce serait différent avec une interface en fait, l'exemple de cppfrance est clair
Marsh Posté le 28-05-2009 à 10:08:53
je pense que c'est plus propre de le mettre protected,c'est le plus logique, on veut que les classes dérivés y est accés mais on ne veut pas qu'une gus externe l'appel explicitement...Le problème est que si une classe prends cette classe comme composition, le destructeur de la 2nd classe ne pourra alors pas appeler le destructeur de la 1ere classe (car destructeur protected), correct ?
EDIT: en faite on mets protected le destructeur de la classe de base
si on veut interdire un user de faire delete de la classe de base, mais alors dans quel cas c'est intéréssant ???Lorsque on ne veut jamais manipuler une hierarchie de classe directement avec son interface ? space
Marsh Posté le 28-05-2009 à 10:23:28
le problème avec les interfaces est le suivant , est ce qu'il faut faire 1,2, 3 ou 4 :
1 - virtual ~A();
2 - virtual ~A(){}
3 - virtual ~A() = 0;
4 - virtual ~A() = 0; ~A::A()?
On est obliger de fournir une implémentation du destructeur , correct ?
Donc dans une interface ou une classe abstraite on doit TOUJOURS implémenter un desctructeur et en plus le mettre virtual, correct ? donc seule 2 ou 4 sont bonnes?
Marsh Posté le 28-05-2009 à 21:08:10
oui 2, une classe sans destructeur, ça n'est pas possible.
Marsh Posté le 29-05-2009 à 16:39:03
juste histoire d'être carré sur ce point, quelqu'un peut m'expliquer l'intérêt et l'usage en pratique de déclarer le destructeur protected? Merci
Marsh Posté le 29-05-2009 à 16:45:51
tu ne peut pas insatncier une classe dont le destruceur est protégé.
Marsh Posté le 28-05-2009 à 07:46:20
Hello,
un petit doute sur un point un peu de base mais bon...
Dans une classe abstraite, faut-il toujours déclarer le desctructeur virtual avec, même avec un corp vide finalement ?
ie: virtual ~A(){}
Merci.