Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Cyrille \cns\ Szymanski
je cherche à appeler une fonction membre virtuelle dans un destructeur mais cela ne fonctionne pas comme je l'aurais espéré.
"In constructors and destructor, the dynamic type of an object equates its static type, meaning that the virtual fonction is statically resolved to A::f." --Gabriel Dos Reis
je cherche à appeler une fonction membre virtuelle dans un destructeur
mais cela ne fonctionne pas comme je l'aurais espéré.
"In constructors and destructor, the dynamic type of an object equates
its static type, meaning that the virtual fonction is statically
resolved to A::f." --Gabriel Dos Reis
je cherche à appeler une fonction membre virtuelle dans un destructeur mais cela ne fonctionne pas comme je l'aurais espéré.
"In constructors and destructor, the dynamic type of an object equates its static type, meaning that the virtual fonction is statically resolved to A::f." --Gabriel Dos Reis
je cherche à appeler une fonction membre virtuelle dans un destructeur mais cela ne fonctionne pas comme je l'aurais espéré.
"In constructors and destructor, the dynamic type of an object equates its static type, meaning that the virtual fonction is statically resolved to A::f." --Gabriel Dos Reis
C'est curieux.
D'un coté, c'est logique que ça pose des problèmes. Exemple:
class Base { public: ~Base() { DoIt(); } protected: virtual void DoIt(){} };
class Fille:public Base { protected: void DoIt(){ std::cout << m_Texte << std::endl; } std::string m_Texte; };
L'ordre d'appel est: - destructeur de "Fille" - destructeur des membres de "Fille" - destructeur de "Base"
Quand le destructeur de "Base" appelle "DoIt" (donc "Fille::DoIt"), hors "Fille" et ses membres ont déjà été détruits, d'où catastrophe.
Cyrille "cns" Szymanski wrote:
je cherche à appeler une fonction membre virtuelle dans un destructeur
mais cela ne fonctionne pas comme je l'aurais espéré.
"In constructors and destructor, the dynamic type of an object equates
its static type, meaning that the virtual fonction is statically
resolved to A::f." --Gabriel Dos Reis
C'est curieux.
D'un coté, c'est logique que ça pose des problèmes. Exemple:
class Base
{
public:
~Base()
{
DoIt();
}
protected:
virtual void DoIt(){}
};
class Fille:public Base
{
protected:
void DoIt(){ std::cout << m_Texte << std::endl; }
std::string m_Texte;
};
L'ordre d'appel est:
- destructeur de "Fille"
- destructeur des membres de "Fille"
- destructeur de "Base"
Quand le destructeur de "Base" appelle "DoIt" (donc "Fille::DoIt"), hors
"Fille" et ses membres ont déjà été détruits, d'où catastrophe.
je cherche à appeler une fonction membre virtuelle dans un destructeur mais cela ne fonctionne pas comme je l'aurais espéré.
"In constructors and destructor, the dynamic type of an object equates its static type, meaning that the virtual fonction is statically resolved to A::f." --Gabriel Dos Reis
C'est curieux.
D'un coté, c'est logique que ça pose des problèmes. Exemple:
class Base { public: ~Base() { DoIt(); } protected: virtual void DoIt(){} };
class Fille:public Base { protected: void DoIt(){ std::cout << m_Texte << std::endl; } std::string m_Texte; };
L'ordre d'appel est: - destructeur de "Fille" - destructeur des membres de "Fille" - destructeur de "Base"
Quand le destructeur de "Base" appelle "DoIt" (donc "Fille::DoIt"), hors "Fille" et ses membres ont déjà été détruits, d'où catastrophe.
Jorge Rivera
Avez vous essayez de declarer le destructeur de A vituel?
Je crois que un destructeur virtuel n'appelera pas A::do_print(), mais do_print() de l'object dynamique...