Destructeurs et virtual

Résolu
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 23 août 2005 à 12:20
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 24 août 2005 à 01:54
Bj, Un des principes de la POO est de toujour faire précéder le
destructeur du mot clef virtual afin qu'il soit appeler meme si il y a
héritage (peut etre y a t'il un autre but)



cependant,

mettre ce mot clef entraine la mémorisation

de l'adresse de la fonction du destructeur (enfin si c'est bien ça)

transmise avec chaque instance de l'objet



et occupe donc

une certaine place ce qui peut etre contrariant

et si on a un grand nombre d'occurences de notre classe


par conséquent,

préconnisez vous l'usage systématique de ce mot clef

ou ne l'utilisez vous

uniquement pour les classes utilisant l'héritage





Merci à vous.
___________________________________________________________
Magicalement
Nono

8 réponses

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
23 août 2005 à 16:16
sinon, je vois pas comment "un des principes de la POO est de toujour
faire précéder le destructeur du mot clef virtual" puisque dans d'autre
langages objet (ex: Java), tlm est virtuel par défaut, donc le mot clé
virtual n'existe meme pas.

Et la phrase "un des principes de la POO en C++ est de toujour faire
précéder le destructeur du mot clef virtual" est un faux principe, vu
que c'est a reserver aux classes qui servent d'interface aux autres. Tu
es pas censé vouloir dériver n'importe quelle classe, ou vouloir faire
du polymorphisme avec. Les containers de la STL ont pas de descructeur
virtual !!
3
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
23 août 2005 à 16:18
parfaitement d'accord

faudra expliquer un jour à nos ex prof qu'ils nous apprennent que des conneries,
je me rappelle avoir u des pt en moins a cause de qqch comme ça

Bon, on sait qu'il y a une distance entre le monde réel et les études, mais là, C mm plus un précipice, ça s'apparente à l'océan, et encore, je suis gentil.

___________________________________________________________
Magicalement
Nono
3
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
23 août 2005 à 15:31
salut,

pour moi, mettre un descructeur virtuel a une classe qui n'a aucune
autre fonction virtuelle est un non sens. On anticipe une évolution de
l'interface de la classe (en disant, si on rajoute une fonction
virtuelle, et qu'on fait du polymorphisme avec, il faudra qu'il y ait
un destructeur virtuel), mais cette situation n'arrive jamais !! et si
cela arrive, c'est de la responsabilité de celui qui ajoute une
fonction virtuelle que de placer le descructeur de la classe de base
virtuel aussi.

et si en C++ tu fais de l'héritage sans virtualité, pour factoriser,
alors autant preferer systematiquement la méthode d'aggregation (pas de
dérivation de la classe A, mais un objet de type A est un champ de la
classe B).



voila, enfin il y a des gens qui vont precher le contraire ...

a+
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
23 août 2005 à 15:51
cela dit, si ton compilateur est malin (vs7 l'est), si tu utilises
statiquement un objet qui a un descructeur virtuel, ton compilo ne
creera aucune table de fonctions virtuelles. Dans le code generé, il
n'y aura donc a mon avis aucune difference !!

enfin selon moi, autant se servir de certains trucs qd c'est pertinent,
et un descructeur virtuel si tu fais jamais d'héritage c'est un peu
débile
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
23 août 2005 à 20:53
"pour moi, mettre un descructeur virtuel a une classe qui n'a aucune autre fonction virtuelle est un non sens"
J'ai pas compris le rapport (on peut faire del'héritage sans fonctions virtuelles)
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
23 août 2005 à 21:01
Ca y est j'ai compris le rapport :)
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
23 août 2005 à 21:13
lol rapide !
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
24 août 2005 à 01:54
ui, cf 1er post de cette page

___________________________________________________________
Magicalement
Nono
0
Rejoignez-nous