class abstraite destrcteur virtuelle

class abstraite destrcteur virtuelle - C++ - Programmation

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.

Reply

Marsh Posté le 28-05-2009 à 07:46:20   

Reply

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


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

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 ?


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 28-05-2009 à 09:35:48    

il faut mieux déclarer protected ??


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 28-05-2009 à 10:00:20    

un destructeur n'a pas de visibilité, il a pas a etre appelé explicitement :o
 
Et je vois pas pourquoi ce serait différent avec une interface en fait, l'exemple de cppfrance est clair :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

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


Message édité par frenchtoucco le 28-05-2009 à 10:32:08

---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

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?


Message édité par frenchtoucco le 28-05-2009 à 10:25:54

---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 28-05-2009 à 15:28:07    

2/

Reply

Marsh Posté le 28-05-2009 à 21:08:10    

oui 2, une classe sans destructeur, ça n'est pas possible.

Reply

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


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 29-05-2009 à 16:39:03   

Reply

Marsh Posté le 29-05-2009 à 16:45:51    

tu ne peut pas insatncier une classe dont le destruceur est protégé.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed