РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
685 of 815 menu

Деструктор

Деструктор - это специальный метод класса, который автоматически вызывается при уничтожении объекта. Он служит для освобождения ресурсов, которые объект захватил за время своей жизни: памяти, файловых дескрипторов, сетевых соединений и так далее. Деструктор не принимает параметров и не возвращает значения, поэтому перегрузить его или указать аргументы по умолчанию невозможно. В классе может быть только один деструктор.

Имя деструктора совпадает с именем класса, но начинается с символа тильда '~'. Деструктор вызывается автоматически в следующих случаях: когда объект выходит из области видимости, когда удаляется объект, созданный через new, а также при уничтожении временных объектов.

Синтаксис

class ClassName { public: ~ClassName() { // освобождение ресурсов } };

Пример

Давайте создадим класс, который в конструкторе и деструкторе выводит сообщения. Так мы увидим, в какой момент вызывается деструктор:

#include <iostream> using namespace std; class Test { public: Test() { cout << "constructor" << endl; } ~Test() { cout << "destructor" << endl; } }; int main() { Test obj; cout << "inside main" << endl; return 0; }

Результат выполнения кода:

"constructor" "inside main" "destructor"

Пример

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

#include <iostream> using namespace std; class Array { private: int* data; public: Array(int size) { data = new int[size]; cout << "memory allocated" << endl; } ~Array() { delete[] data; cout << "memory freed" << endl; } }; int main() { Array arr(5); return 0; }

Результат выполнения кода:

"memory allocated" "memory freed"

Пример

Если объект создан через new, деструктор вызывается только при явном вызове delete. Давайте проверим это:

#include <iostream> using namespace std; class Test { public: ~Test() { cout << "destructor called" << endl; } }; int main() { Test* obj = new Test(); cout << "before delete" << endl; delete obj; cout << "after delete" << endl; return 0; }

Результат выполнения кода:

"before delete" "destructor called" "after delete"

Смотрите также

  • конструктор constructor,
    который вызывается при создании объекта
  • ключевое слово decl,
    которое объявляет тип данных
  • спецификатор public,
    который открывает доступ к членам класса
  • спецификатор private,
    который закрывает доступ к членам класса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить