printКлассы

printДеструктор

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

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

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

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

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

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