Введение в деструктор в C ++

Как мы все знаем, C ++ является объектно-ориентированным языком программирования и широко используется в ИТ-индустрии для разработки программного обеспечения, драйверов, встроенных программно-аппаратных средств и клиент-серверных приложений. Это язык среднего уровня, инкапсулирующий возможности как языка высокого, так и низкого уровня. У этого есть понятие классов и объектов. В C ++ конструкторы играют важную роль в создании объекта и инициализации переменных экземпляра, но что происходит с этими объектами и ресурсами после того, как они больше не используются или программа заканчивается? Об этой ответственности заботятся деструкторы в C ++. Деструкторы используются для уничтожения объектов, созданных Конструкторами, когда они больше не нужны для освобождения памяти. Они являются специальными функциями-членами и автоматически вызываются C ++. компилятор для освобождения памяти, когда в программе нет пользовательского деструктора. Как и конструкторы, деструкторы также имеют то же имя, что и класс, которому предшествует знак тильды (~). Но деструктор не принимает никаких аргументов / параметров и ничего не возвращает, то есть они не имеют никакого возвращаемого типа.

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

  • Когда вызывается оператор удаления.
  • Когда выполнение программы закончится.
  • Когда блок / область действия локальных переменных заканчивается.

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

Как работает деструктор в C ++?

Для работы деструктора необходимо учитывать следующие моменты:

  • Деструкторы объектов класса вызываются в первую очередь перед вызовом деструктора членов и баз. Деструкторы не виртуального базового класса вызываются перед деструкторами виртуального базового класса.
  • Перед базовыми классами вызывается деструктор нестатических членов. Деструкторы как виртуальных, так и не виртуальных базовых классов вызываются в обратном порядке их объявления.
  • Неявные деструкторы автоматически вызываются компилятором C ++, когда объект выходит из области видимости или выполнение программы прекращается для внешних и статических объектов в программе. Деструкторы вызываются для уничтожения объектов, созданных новым ключевым словом.
  • В случае как неявных, так и определяемых пользователем деструкторов, компилятор сначала выполняет тело деструктора, а затем вызывает деструкторы всех нестатических не вариантных классов, а затем вызывает деструкторы не виртуальных и виртуальных базовых классов в обратном порядке: их конструкция.

Синтаксис деструктора

Деструкторам в C ++ предшествует знак тильды (~). Ниже упоминается основной синтаксис деструктора:

Синтаксис:

Class class_name()
(


public:
class_name(); // Constructor
~class_name(); // destructor
)
)

В синтаксисе «имя_класса» - это имя класса, а в методе main определены как конструктор, так и деструктор с одним и тем же именем класса. Деструктор не имеет ни параметров, ни возвращаемого типа.

Примеры деструктора в C ++

Ниже приведен пример Деструктора в C ++:

Пример № 1: Программа с пользовательским деструктором

Код:

#include
using namespace std;
class Example1( //class
public:
Example1()( // constructor cout << “Hello I am inside a constructor” << endl;
)
~Example1()( //destructor
cout << “Hello I am inside a destructor” << endl;
)
void display()
(
cout << “Hello this is a display method” << endl
)
);
int main()
(
Example1 ex; //object created
ex.display(); // display method called return 0;
)

Выход:

В приведенном выше примере «Example1» - это имя класса, а «ex» - объект, созданный из этого класса. Сначала вызывается конструктор, поэтому текст, написанный в конструкторе, печатается, затем вызывается метод отображения ana, наконец, деструктор вызывается после завершения всего выполнения программы.

Пример №2: программа с виртуальным деструктором

Код:

#include
using namespace std;
class b1 ( //base class
public:
b1() // constructor of base class
(
cout << “Hello this is base constructor” << endl;
)
~virtual b1() // destructor of base class
(
cout << “Hello this is base destructor” << endl;
)
);
class b2: public b1( // derived class of base class (b1) public:
b2() //constructor of derived cass
(
cout << “Hello this is derived constructor” << endl;
)
~ b2() // destructor of derived class
(
cout << “Hello this is derived destructor” << endl;
)
);
int main(void) //main method
(
b2 *der = new b2();
b1 *bas = der;
delete der;
getchar();
return 0;
)

Выход:

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

Преимущества деструктора в C ++

  • Это дает последний шанс очистить ресурсы, которые не используются, чтобы освободить память, занятую неиспользуемыми объектами, такими как удаление динамических объектов, закрытие системных дескрипторов, использованных файлов.
  • Из-за большого количества ресурсов, занимающих место и не используемых в компьютере, деструктор всегда имеет хорошее изображение, чтобы уменьшить вероятность утечки памяти, уничтожая эти неиспользуемые объекты.
  • Хотя в C ++ действительно есть механизм сборки мусора, но автоматический вызов деструктора независимо от того, вызывает ли его программист или нет, чтобы освободить место, предотвращает появление многих наихудших ситуаций в будущем.

Очки, чтобы подвести итог о деструкторе

  • Деструкторы используются для уничтожения неиспользованных ресурсов класса.
  • Деструкторы имеют то же имя, что и имя класса, которому предшествует знак (~).
  • В отличие от конструкторов, здесь не может быть параметров деструктора.
  • Нет возвращаемого типа деструктора.
  • Если пользователь не определяет деструктор сам по себе в программе, компилятор автоматически создает для него один деструктор.
  • В одном классе не может быть более одного деструктора.

Вывод

Приведенное выше описание деструкторов четко определяет использование и реализацию деструктора в программе на C ++. Хотя концепция деструктора еще не сложна, ее очень важно понять перед реализацией в программе, поскольку неправильное использование деструктора может привести к неожиданным результатам.

Рекомендуемая статья

Это руководство к деструктору в C ++. Здесь мы обсуждаем введение в деструктор в C ++ и работу деструктора вместе с преимуществами. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше -

  1. Деструктор в Java (Примеры)
  2. Введение в переопределение в C ++
  3. Шаблоны в C ++ (примеры)
  4. Типы конструктора в C ++
  5. Деструктор в Python (синтаксис, примеры)