Деструктор
Определение:
Деструктор – это специальный метод без параметров, имя которого состоит из символа
~ и имени класса. Деструктор не имеет возвращаемого значения, даже
void. Деструктор не может быть объявлен как
const или
static, но может быть
virtual.
Синтаксис:
~имя класса();
Задача: Освободить используемые объектом ресурсы, обычно это динамически выделяемая память, реже каналы ввода-вывода, связанные с файлами, устройствами и т.п.
Назначение: Вызывается компилятором автоматически при уничтожении объектов:
- для локальных объектов – при выходе из блока, в котором они объявлены;
- для статических объектов – после завершения функции main;
- для объектов, созданных в динамической памяти – при выполнении операции delete.
Замечания:
- После выполнения тела деструктора, компилятором автоматически вызываются деструкторы для полей, а затем базовых классов в порядке, обратном указанному при объявлении класса.
- Если деструктор явно не определен, компилятор сам создает деструктор с пустым телом: ~имя класса(){}
- В случае использования классом динамической памяти необходимо определять деструктор самостоятельно.
- Если класс будет использован как базовый в иерархии класс, рекомендуется сделать его деструктор виртуальным. Тогда при выполнении операции delete будет вызываться правильный деструктор, независимо от типа указателя.
- Не рекомендуется вызывать деструктор явно, единственным исключением является случай повторной инициализации объекта (см. пример)
Пример:
class Stack {
int size,t;
int *s;
public:
~Stack();
...
};
Stack::~Stack()
{
delete[] s;
}