Destruktor klas dla których tworzy się klasy potomne muszą mieć destruktor wirtualny. Każda kolejna klasa, która dziedziczy od klasy potomnej, której rodzic ma destruktor wirtualny, również będzie posiadała destruktor wirtualny, nawet gdy nie użyjemy virtual przy deklaracji czy definicji destruktora w klasie.

Oznacza to, że gdyby dopisać do powyższego przykładu: (...)

class Elektryk : public Pracownik { public: ~Elektryk()

std::cout << "~Elektryk(): uruchomiono" << std::endl;

int main() { Osoba *wsk = new Elektryk; delete wsk;

return 0; }

to wynikiem działania programu będzie wypisanie na ekranie: ~Elektryk(): uruchomiono ~Pracownik(): uruchomiono ~Osoba(): uruchomiono

natomiast w przypadku pominięcia virtual w klasie podstawowej, wywołanie wszystkich destruktorów (poza destruktorem klasy Osoba) zostanie pominięte i na ekranie będzie wypisane tylko: ~Osoba(): uruchomiono

Finalizator W niektórych językach z wbudowanym odśmiecaczem (np. Java i C#) dostępna jest składnia finalizatora – specjalnej metody wywoływanej, gdy obiekt jest usuwany przy odśmiecaniu. W przeciwieństwie do destruktora nie wiadomo, w którym dokładnie momencie działania programu to nastąpi.

Przypisy

Kategoria:Programowanie obiektowe