Kolejność wywołania destruktorów w dziedziczeniu

0

Jeśli mam dwie klasy: Czlowiek i Pracownik i tworzę taki obiekt:

Osoba *o = new Pracownik("Tadeusz", "kierownik") 

to najpierw wykona się destruktor z klasy Pracownik a potem z klasy Osoba ?

1

A logicznie jak byś zrobił? Od specjalizacji do ogólności. :)

dobra - masz http://cpp0x.pl/kursy/Kurs-C++/Poziom-X/Wirtualne-destruktory/247 :)

0

Właśnie zrobiłbym tak jak mówie, ale jak nie ma destruktorów wirtualnych to nie wiem czemu, ale destruktor klasy Osoba tylko wykonuje się.

0

No, bo brak wirtualnego destruktora powoduje z automatu wyciek pamięci. W Twoim przypadku wyłączasz polimofrizm i architektura się sypie, bo wywołujesz jedynie destruktor podstawy.

Poczytaj: http://cpp0x.pl/kursy/Programowanie-obiektowe-C++/Polimorfizm/499

1
Czarny Mleczarz napisał(a):

Właśnie zrobiłbym tak jak mówie, ale jak nie ma destruktorów wirtualnych to nie wiem czemu, ale destruktor klasy Osoba tylko wykonuje się.

Wskaźnik jest typu Osoba*, jak usuwasz obiekt wskazany przez ten wskaźnik to wywołuje się destruktor Osoba, koniec pieśni. Obecność wirtualnego destruktora mówi kompilatorowi, że być może ten wskaźnik wskazuje na obiekt klasy pochodnej i należy również wywołać jej destruktor.

0

to najpierw wykona się destruktor z klasy Pracownik a potem z klasy Osoba ?

Dlaczego nie sprawdzisz?

Wyświetl sobie w destruktorze tekst na ekran, to będziesz wiedział, który jest pierwszy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1