printКлассы

printДеструктор

Определение: Деструктор – это специальный метод без параметров, имя которого состоит из символа ~ и имени класса. Деструктор не имеет возвращаемого значения, даже void. Деструктор не может быть объявлен как const или static, но может быть virtual.

Синтаксис: ~имя класса();

Задача: Освободить используемые объектом ресурсы, обычно это динамически выделяемая память, реже каналы ввода-вывода, связанные с файлами, устройствами и т.п.

Назначение: Вызывается компилятором автоматически при уничтожении объектов:
  • для локальных объектов – при выходе из блока, в котором они объявлены;
  • для статических объектов – после завершения функции main;
  • для объектов, созданных в динамической памяти – при выполнении операции delete.

Замечания:
  • После выполнения тела деструктора, компилятором автоматически вызываются деструкторы для полей, а затем базовых классов в порядке, обратном указанному при объявлении класса.
  • Если деструктор явно не определен, компилятор сам создает деструктор с пустым телом: ~имя класса(){}
  • В случае использования классом динамической памяти необходимо определять деструктор самостоятельно.
  • Если класс будет использован как базовый в иерархии класс, рекомендуется сделать его деструктор виртуальным. Тогда при выполнении операции delete будет вызываться правильный деструктор, независимо от типа указателя.
  • Не рекомендуется вызывать деструктор явно, единственным исключением является случай повторной инициализации объекта (см. пример)

Пример:
class Stack {
  int size,t;
  int *s; 
public:
  ~Stack();
  ...
};
Stack::~Stack()
{
  delete[] s;
}
loading