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 ?
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 ?
A logicznie jak byś zrobił? Od specjalizacji do ogólności. :)
dobra - masz http://cpp0x.pl/kursy/Kurs-C++/Poziom-X/Wirtualne-destruktory/247 :)
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ę.
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
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.
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.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.