Основные свойства и правила использования деструкторов:
– класс может иметь только один деструктор;
– деструктор имеет то же имя, что и класс, в котором он объявляется, с префиксом тильда (~);
– деструктор не имеет параметров (аргументов);
– деструктор не возвращает значения (даже типа void);
– конструкторы нельзя объявлять как const или static;
– деструктор не наследуется в производных классах. Но производный класс может вызывать деструкторы для его базовых (родительских) классов;
– деструктор – это функция, и он может быть виртуальным (его можно объявить с ключевым словом virtual);
– в программе невозможно получить адрес деструктора (указатель на деструктор);
– если деструктор не задан в программе, он будет автоматически сгенерирован компилятором для уничтожения соответствующих объектов. Все деструкторы, сгенерированные таким образом, имеют атрибут public;
– деструктор можно вызвать так же, как обычную функцию, если использовать его полное имя. Например, Х*р; ... р->Х::Х()
– деструктор вызывается автоматически только разрушении (уничтожении) объекта;
– объект, содержащий деструктор, нельзя включить в виде компонента в объединение (union);
– при вызове библиотечной функции exit вызываются деструкторы только для глобальных объектов;
– при вызове библиотечной функции abort никакие деструкторы не вызываются;
– если память под объект выделена через указатель с помощью оператора new, то при прекращении существования этого указателя объект автоматически не разрушается. Для разрушения объекта в программе надо использовать оператор delete.