Wirtualny destruktor W większości języków destruktor, tak jak każda metoda może być wirtualny. W wielu sytuacjach destruktor musi być wirtualny aby zapewnić prawidłowe wykorzystanie klasy, np. w C++ klasa powinna mieć destruktor wirtualny kiedy zachodzi możliwość, że inna klasa będzie po niej dziedziczyła i będzie używany polimorfizm. Jest to możliwość dziedziczenia, nawet kiedy w danej chwili klasa nie ma żadnych potomków; w przeciwnym razie zachodzi konieczność zmiany deklaracji destruktora w momencie dodania klasy pochodnej, a to spowodowałoby zerwanie kompatybilności z już istniejącym kodem wykorzystującym tę klasę.

Przykład w C++ #include <iostream>

class Osoba { public: virtual ~Osoba()

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

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

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

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

return 0; }

W powyższym przykładzie zostały zdefiniowane dwie klasy – klasa podstawowa Osoba oraz klasa pochodna Pracownik. W sekcji publicznej klasy Osoba został zdefiniowany wirtualny destruktor.