et auxquelles j'accède classiquement à partir de pointeurs alloués dans le
tas sur la classe de base.
A priori, ça fait des fonctions virtuelles inutiles (elles ne font rien) ?
et auxquelles j'accède classiquement à partir de pointeurs alloués dans le
tas sur la classe de base.
A priori, ça fait des fonctions virtuelles inutiles (elles ne font rien) ?
et auxquelles j'accède classiquement à partir de pointeurs alloués dans le
tas sur la classe de base.
A priori, ça fait des fonctions virtuelles inutiles (elles ne font rien) ?
est-il utile dans ce
cas de définir un destructeur virtuel dans la classe de base.
est-il utile dans ce
cas de définir un destructeur virtuel dans la classe de base.
est-il utile dans ce
cas de définir un destructeur virtuel dans la classe de base.
On Tue, 11 Aug 2009 22:31:34 +0200, "Marc G" :
>est-il utile dans ce
>cas de définir un destructeur virtuel dans la classe de base.
Pour conclure et compléter mon message précédent : si une classe a au
moins une fonction virtuelle, son destructeur doit aussi être virtuel.
D'ailleurs, il me semble que g++ râle si ce n'est pas le cas.
On Tue, 11 Aug 2009 22:31:34 +0200, "Marc G" <mgueg...@metrica.fr>:
>est-il utile dans ce
>cas de définir un destructeur virtuel dans la classe de base.
Pour conclure et compléter mon message précédent : si une classe a au
moins une fonction virtuelle, son destructeur doit aussi être virtuel.
D'ailleurs, il me semble que g++ râle si ce n'est pas le cas.
On Tue, 11 Aug 2009 22:31:34 +0200, "Marc G" :
>est-il utile dans ce
>cas de définir un destructeur virtuel dans la classe de base.
Pour conclure et compléter mon message précédent : si une classe a au
moins une fonction virtuelle, son destructeur doit aussi être virtuel.
D'ailleurs, il me semble que g++ râle si ce n'est pas le cas.
Bonsoir,
Tout ou presque est dans l'objet de ma question.
J'ai une hiérarchie de classes assez simples qui dérivent toutes de la même
classe de base
et auxquelles j'accède classiquement à partir de pointeurs alloués dans le
tas sur la classe de base.
Les destructeurs associés à ces classes ne font rien
=> d'où ma question : est-il utile de les définir et est-il utile dans ce
cas de définir un destructeur virtuel dans la classe de base.
Bonsoir,
Tout ou presque est dans l'objet de ma question.
J'ai une hiérarchie de classes assez simples qui dérivent toutes de la même
classe de base
et auxquelles j'accède classiquement à partir de pointeurs alloués dans le
tas sur la classe de base.
Les destructeurs associés à ces classes ne font rien
=> d'où ma question : est-il utile de les définir et est-il utile dans ce
cas de définir un destructeur virtuel dans la classe de base.
Bonsoir,
Tout ou presque est dans l'objet de ma question.
J'ai une hiérarchie de classes assez simples qui dérivent toutes de la même
classe de base
et auxquelles j'accède classiquement à partir de pointeurs alloués dans le
tas sur la classe de base.
Les destructeurs associés à ces classes ne font rien
=> d'où ma question : est-il utile de les définir et est-il utile dans ce
cas de définir un destructeur virtuel dans la classe de base.
On Tue, 11 Aug 2009 22:31:34 +0200, "Marc G" :
>est-il utile dans ce cas de définir un destructeur virtuel
>dans la classe de base.
Pour conclure et compléter mon message précédent : si une
classe a au moins une fonction virtuelle, son destructeur doit
aussi être virtuel.
D'ailleurs, il me semble que g++ râle si ce n'est pas le cas.
On Tue, 11 Aug 2009 22:31:34 +0200, "Marc G" <mgueg...@metrica.fr>:
>est-il utile dans ce cas de définir un destructeur virtuel
>dans la classe de base.
Pour conclure et compléter mon message précédent : si une
classe a au moins une fonction virtuelle, son destructeur doit
aussi être virtuel.
D'ailleurs, il me semble que g++ râle si ce n'est pas le cas.
On Tue, 11 Aug 2009 22:31:34 +0200, "Marc G" :
>est-il utile dans ce cas de définir un destructeur virtuel
>dans la classe de base.
Pour conclure et compléter mon message précédent : si une
classe a au moins une fonction virtuelle, son destructeur doit
aussi être virtuel.
D'ailleurs, il me semble que g++ râle si ce n'est pas le cas.
> -> "Ne fais rien", tu oublies vraisemblablement qu'il y a les destructeurs
des membres ajoutes.
> -> "Ne fais rien", tu oublies vraisemblablement qu'il y a les destructeurs
des membres ajoutes.
> -> "Ne fais rien", tu oublies vraisemblablement qu'il y a les destructeurs
des membres ajoutes.
> -> "Ne fais rien", tu oublies vraisemblablement qu'il y a les destructeurs
> des membres ajoutes.
oui, mais ils "s'auto-détruisent" :-)
Mes destructreurs sont tous du type
virtual ~ClasseDerivee() {}
ie qu'ils ne font pas grand chose.
Mais je crois comprendre que si je fais un delete à partir d'un pointeur de
la classe de base,
le destructeur de celle-ci doit être déclaré virtuel même dans ce cas...
> -> "Ne fais rien", tu oublies vraisemblablement qu'il y a les destructeurs
> des membres ajoutes.
oui, mais ils "s'auto-détruisent" :-)
Mes destructreurs sont tous du type
virtual ~ClasseDerivee() {}
ie qu'ils ne font pas grand chose.
Mais je crois comprendre que si je fais un delete à partir d'un pointeur de
la classe de base,
le destructeur de celle-ci doit être déclaré virtuel même dans ce cas...
> -> "Ne fais rien", tu oublies vraisemblablement qu'il y a les destructeurs
> des membres ajoutes.
oui, mais ils "s'auto-détruisent" :-)
Mes destructreurs sont tous du type
virtual ~ClasseDerivee() {}
ie qu'ils ne font pas grand chose.
Mais je crois comprendre que si je fais un delete à partir d'un pointeur de
la classe de base,
le destructeur de celle-ci doit être déclaré virtuel même dans ce cas...
Pour conclure et compléter mon message précédent : si une
classe a au moins une fonction virtuelle, son destructeur doit
aussi être virtuel.
Il n'y a rien dans la norme qui dit ça.
D'ailleurs, il me semble que g++ râle si ce n'est pas le cas.
Pas chez moi. (Tous les compilateurs ont des warnings stupids
qu'il faut supprimer.)
Pour conclure et compléter mon message précédent : si une
classe a au moins une fonction virtuelle, son destructeur doit
aussi être virtuel.
Il n'y a rien dans la norme qui dit ça.
D'ailleurs, il me semble que g++ râle si ce n'est pas le cas.
Pas chez moi. (Tous les compilateurs ont des warnings stupids
qu'il faut supprimer.)
Pour conclure et compléter mon message précédent : si une
classe a au moins une fonction virtuelle, son destructeur doit
aussi être virtuel.
Il n'y a rien dans la norme qui dit ça.
D'ailleurs, il me semble que g++ râle si ce n'est pas le cas.
Pas chez moi. (Tous les compilateurs ont des warnings stupids
qu'il faut supprimer.)
On Wed, 12 Aug 2009 00:44:48 -0700 (PDT), James Kanze
:
>> Pour conclure et compléter mon message précédent : si une
>> classe a au moins une fonction virtuelle, son destructeur doit
>> aussi être virtuel.
>Il n'y a rien dans la norme qui dit ça.
Non. Disons que c'est une règle façon "recette de cuisine",
facile à suivre tant qu'on n'a pas compris tous les tenants et
aboutissants.
En l'occurence, si ta classe a des fonctions virtuelles, c'est
que tu comptes utiliser le polymorphisme d'héritage, et avoir
des pointeurs (ou références) sur la classe de base. Dans ce
cas, avoir un destructeur non virtuel, c'est jouer avec le
feu, et comme on a déjà une vtable, déclarer le destructeur
virtuel ne coûte pas plus cher.
>> D'ailleurs, il me semble que g++ râle si ce n'est pas le
>> cas.
>Pas chez moi. (Tous les compilateurs ont des warnings stupids
>qu'il faut supprimer.)
En fait, je crois que g++ râle quand on dérive d'une classe
qui n'a pas de destructeur virtuel. Ce qui peut s'avérer un
bon warning, suivant la situation.
On Wed, 12 Aug 2009 00:44:48 -0700 (PDT), James Kanze
<james.ka...@gmail.com>:
>> Pour conclure et compléter mon message précédent : si une
>> classe a au moins une fonction virtuelle, son destructeur doit
>> aussi être virtuel.
>Il n'y a rien dans la norme qui dit ça.
Non. Disons que c'est une règle façon "recette de cuisine",
facile à suivre tant qu'on n'a pas compris tous les tenants et
aboutissants.
En l'occurence, si ta classe a des fonctions virtuelles, c'est
que tu comptes utiliser le polymorphisme d'héritage, et avoir
des pointeurs (ou références) sur la classe de base. Dans ce
cas, avoir un destructeur non virtuel, c'est jouer avec le
feu, et comme on a déjà une vtable, déclarer le destructeur
virtuel ne coûte pas plus cher.
>> D'ailleurs, il me semble que g++ râle si ce n'est pas le
>> cas.
>Pas chez moi. (Tous les compilateurs ont des warnings stupids
>qu'il faut supprimer.)
En fait, je crois que g++ râle quand on dérive d'une classe
qui n'a pas de destructeur virtuel. Ce qui peut s'avérer un
bon warning, suivant la situation.
On Wed, 12 Aug 2009 00:44:48 -0700 (PDT), James Kanze
:
>> Pour conclure et compléter mon message précédent : si une
>> classe a au moins une fonction virtuelle, son destructeur doit
>> aussi être virtuel.
>Il n'y a rien dans la norme qui dit ça.
Non. Disons que c'est une règle façon "recette de cuisine",
facile à suivre tant qu'on n'a pas compris tous les tenants et
aboutissants.
En l'occurence, si ta classe a des fonctions virtuelles, c'est
que tu comptes utiliser le polymorphisme d'héritage, et avoir
des pointeurs (ou références) sur la classe de base. Dans ce
cas, avoir un destructeur non virtuel, c'est jouer avec le
feu, et comme on a déjà une vtable, déclarer le destructeur
virtuel ne coûte pas plus cher.
>> D'ailleurs, il me semble que g++ râle si ce n'est pas le
>> cas.
>Pas chez moi. (Tous les compilateurs ont des warnings stupids
>qu'il faut supprimer.)
En fait, je crois que g++ râle quand on dérive d'une classe
qui n'a pas de destructeur virtuel. Ce qui peut s'avérer un
bon warning, suivant la situation.
Mes destructreurs sont tous du type
virtual ~ClasseDerivee() {}
ie qu'ils ne font pas grand chose.
Mais je crois comprendre que si je fais un delete à partir
d'un pointeur de la classe de base, le destructeur de celle-ci
doit être déclaré virtuel même dans ce cas...
Mes destructreurs sont tous du type
virtual ~ClasseDerivee() {}
ie qu'ils ne font pas grand chose.
Mais je crois comprendre que si je fais un delete à partir
d'un pointeur de la classe de base, le destructeur de celle-ci
doit être déclaré virtuel même dans ce cas...
Mes destructreurs sont tous du type
virtual ~ClasseDerivee() {}
ie qu'ils ne font pas grand chose.
Mais je crois comprendre que si je fais un delete à partir
d'un pointeur de la classe de base, le destructeur de celle-ci
doit être déclaré virtuel même dans ce cas...