Le destructeur de classe interne est appelé après le destructeur de classe de base
J'ai une question basique et simple.
J'ai ce scénario:
#include <iostream>
using namespace std;
class Inner1
{
public:
~Inner1() {cout << "Inner1 Des\n";};
};
class Inner2
{
public:
~Inner2() {cout << "Inner2 Des\n";};
};
class Base
{
public:
~Base() {cout << "Base Des\n";};
Inner1 inner1;
Inner2 inner2;
};
int main() {
Base base;
return 0;
}
Et ma console me dit maintenant ceci:
Destructeur de base appelé
destructeur
Inner2 appelé destructeur Inner1 appelé
Est-ce le comportement normal? Parce que la fonctionnalité de certaines fonctions
est déjà détruite dans mon destructeur de classe de base et que les classes internes en dépendent.
Solution de contournement non recommandée:
Ajoutez simplement une classe "Destroyer" avec un objet à la première position:
[...]
class Base
{
public:
~Base() {cout << "Base Des\n";};
class Destroyer
{
~Destroyer()
{
//Put the stuff here because this destr will be called last
cout << "Destroyer Des\n";
}
} _destroyer;
Inner1 inner1;
[...]
Merci de votre aide
Est-ce le comportement normal?
Oui. Les destructeurs de sous-objets sont appelés par le destructeur de la classe conteneur. En particulier, les sous-objets seront détruits après l'exécution du corps du destructeur de classes de conteneurs.
Parce que la fonctionnalité de certaines fonctions est déjà détruite dans mon destructeur de classe de base et que les classes internes en dépendent.
Ce n'est un problème que si les destructeurs de classes internes [sic] dépendent de l' Base
instance qui les contient. Dans ce cas, soit Base
ne doivent pas les contenir en tant que membres, soit leur destructeur ne doit pas dépendre de Base
.