Destructeurs et virtual [Résolu]

Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
- - Dernière réponse : 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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
3
3
Merci
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 !!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 145 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cosmobob
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 145 internautes nous ont dit merci ce mois-ci

Commenter la réponse de magic_Nono
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
3
0
Merci
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+
Commenter la réponse de cosmobob
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
3
0
Merci
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
Commenter la réponse de cosmobob
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
6
0
Merci
"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)
Commenter la réponse de vecchio56
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
6
0
Merci
Ca y est j'ai compris le rapport :)
Commenter la réponse de vecchio56
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
3
0
Merci
lol rapide !
Commenter la réponse de cosmobob
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
0
Merci
ui, cf 1er post de cette page

___________________________________________________________
Magicalement
Nono
Commenter la réponse de magic_Nono