Деструктор автоматически вызывается при завершении времени жизни объекта, потому что это необходимо для освобождения ресурсов, которые были захвачены либо в конструкторе класса, либо на протяжении жизни объекта. 1
Например, деструктор может освободить замок или память, выделенную оператором new. 1 Также он может реализовать любую операцию, которая по замыслу проектировщика класса должна быть выполнена сразу по окончании использования объекта. 1
Кроме того, для обычных переменных компилятор автоматически вызывает деструкторы, когда эти переменные выходят из своей области видимости. 3