Деструктор - особый вид метода, применяемого для освобождения памяти, занимаемой объектом. Имя деструктора совпадает с именем класса, но перед ним ставится символ «~» (тильда). Деструктор определяет операции, которые необходимо выполнить при уничтожении объекта. Деструктор вызывается автоматически, когда объект выходит из области видимости для локальных объектов - при выходе из блока, в котором они были объявлены; для глобальных – как часть процедуры выхода из main. Для объектов, заданных через указатели, деструктор выполняется неявно при использовании операции delete.
Деструктор
В иерархии классов деструкторы, в отличие от конструкторов (которые выполняются в порядке своего "классового происхождения"), выполняются в обратном порядке.
Если деструктор не определен явным образом, то компилятор создает автоматически пустой деструктор. Явным образом деструктор требуется описывать в случае, когда объект создает указатели на память, выделяемую динамически. Иначе при уничтожении объекта память, на которую ссылались его указатели, не будет помечена как свободная. Указатель на деструктор определить нельзя.

Деструктор можно вызывать явным образом путем указания полностью уточненного имени.

Деструкторы, вызываемые неявно. Если программа завершается с использованием exit, то вызывается деструктор только глобальных объектов. При завершении программы, в которой использовались объекты некоторого класса функции abort, деструктор не вызывается.
Пример 1
class String {
 
public:
   
// набор конструкторов
   String();
   String( const char* );
   String( const String& );
 
   // деструктор
   ~String();
 
 private:
...
 }