Witam!
Mam taki kod:
class A
{
public:
A()
{}
~A()
{
cout << "Destruktor" << endl;
}
};
class B
{
public:
B()
{
cout << "1" << endl;
}
~B()
{}
A a;
};
I teraz zacznie robić się śmiesznie:
class C
{
public:
C()
{
}
~C()
{}
A a; // Po zakończeniu konstruktora C() wywołuje się destruktor ~A() obiektu 'a'
B b; // Po zakończeniu konstruktora C() wywołuje się desktruktor ~B(),
// a żeby było śmieszniej wywołuje się on jeszcze przed destruktorem obiektu 'a',
// dalej wywołany zostaje destruktor ~A() obiektu 'b.a'
};
Wyjaśni mi ktoś co tu się odwala? Z tego co mi było wiadomo, to destruktory są wywoływane przy niszczeniu obiektu (z takim zamysłem napisałem oryginalny kod, który został tutaj przeze mnie bardzo uproszczony), a nie podczas zakończenia konstruktora klasy, w której się omawiany obiekt znajduje.
Kończąc dodam, że finalnie w tym całym kodzie klasa B w ogóle nie będzie występować, ponieważ dodałem ją tutaj dla testów (i jak się okazało przy jej działaniu też dzieje się "magia"). Kod ma wyglądać tak:
// Oczywiście w gigantycznym uproszczeniu
class C
{
public:
C()
{
}
~C()
{}
A a;
};
Pozdrawiam.