Destruktor – specjalna metoda, wywoływana przez program przed usunięciem obiektu i niemal nigdy nie wywoływana wprost w kodzie używającym obiektu. Pod względem funkcjonalnym jest to przeciwieństwo konstruktora.

Destruktor ma za zadanie wykonać czynności składające się na jego „zniszczenie”, inne niż zwolnienie pamięci zajmowanej przez sam obiekt, a przygotowujące obiekt do fizycznego usunięcia. Po jego wykonaniu obiekt znajduje się w stanie osobliwym i zazwyczaj nie można już z tym obiektem zrobić nic poza fizycznym usunięciem. Destruktor zwykle wykonuje takie czynności, jak zamknięcie połączenia z plikiem/gniazdem/potokiem, wyrejestrowanie się z innych obiektów, czasem również zanotowanie faktu usunięcia, a także usunięcie obiektów podległych, które obiekt utworzył lub zostały mu przydzielone jako podległe (jeśli jest ich jedynym właścicielem), lub wyrejestrowanie się z ich użytkowania (jeśli są to obiekty przezeń współdzielone).

W wielu językach programowania (np. Object Pascal) destruktor jest dziedziczony jak każda inna metoda wirtualna.