Вступ до Destructor в C ++

Як ми всі знаємо, C ++ - це об'єктно-орієнтована мова програмування і широко використовується в ІТ-галузях для розробки програмного забезпечення, драйверів, вбудованих програмних засобів та клієнт-серверів. Це мова середнього рівня, що інкапсулює особливості як мови високого рівня, так і мови низького рівня. У ньому є поняття про класи та предмети. У C ++ конструктори відіграють важливу роль у створенні об'єкта та ініціалізації змінних екземплярів, але що відбувається з цими об'єктами та ресурсами після того, як вони більше не використовуються або програма закінчується? Цю відповідальність доглядають деструктори C ++. Деструктори використовуються для знищення об'єктів, створених Конструкторами, коли вони більше не потрібні для звільнення пам'яті. Вони є спеціальними функціями членів і автоматично викликаються C ++. компілятор для звільнення пам'яті, коли в програмі немає визначеного користувачем деструктора. Як і у конструкторів, деструктори також мають таку саму назву, що і клас, якому передує знак tilde (~). Але деструктор не приймає жодних аргументів / параметрів і нічого не повертає, тобто у них немає жодного типу повернення.

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

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

Програміст може визначити деструктор, відомий як конструктор, призначений користувачем. Деструктор може бути оголошений як віртуальний або чистий віртуальний, але не може бути оголошений const, непостійним, const летючим або статичним.

Як Destructor працює в C ++?

Для роботи деструктора слід пам’ятати про нижчезазначені моменти:

  • Деструктори класових об'єктів викликаються спочатку перед викликом деструктора членів та баз. Деструктори невіртуального базового класу викликаються перед деструкторами віртуального базового класу.
  • Перед базовими класами викликається деструктор нестатичних членів. Деструктори як віртуальних, так і невіртуальних базових класів викликаються у зворотному порядку їх декларації.
  • Неявні деструктори викликаються автоматично компілятором C ++, коли об’єкт виходить із сфери дії або виконання програми завершується для зовнішніх та статичних об'єктів програми. Деструктори покликані знищувати об'єкти, створені новим ключовим словом.
  • У випадку неявних та визначених користувачем деструкторів компілятор спочатку виконує тіло деструктора, а потім викликає деструктори всіх нестатичних не варіативних класів, а потім викликає деструктори невіртуальних та віртуальних базових класів у зворотному порядку їх побудова.

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

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

Синтаксис:

Class class_name()
(


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

У синтаксисі 'class_name' - це назва класу, а в основному методі визначаються як конструктор, так і деструктор з однаковою назвою класу. Деструктор не має жодних параметрів, а також тип повернення.

Приклади Destructor в C ++

Нижче наводиться приклад Destructor в 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;
)

Вихід:

Хороша практика зробити деструктор базового класу віртуальним, оскільки це забезпечує правильне знищення об'єкта похідного класу. Щоразу, коли використовується віртуальний клас, слід негайно додавати віртуальний деструктор, щоб запобігти будь-яким майбутнім несподіваним результатам.

Переваги Destructor в C ++

  • Це дає остаточний шанс очистити ресурси, які не використовуються, щоб звільнити пам'ять, зайняту невикористаними об'єктами, як видалення динамічних об'єктів, закриття системних ручок, використаних файлів.
  • Через багато ресурсів, що займають місце і не звикають до комп'ютера, деструктор завжди має гарне зображення, щоб зменшити шанси на витік пам'яті, знищивши ці невикористані речі.
  • Хоча C ++ має механізм збору сміття, але автоматичний виклик деструктора незалежно від того, програміст викликає його чи ні, щоб звільнити місце, заважає користувачеві виникнути у багатьох найгірших ситуаціях у майбутньому.

Бали підвести підсумки про Destructor

  • Деструктори використовуються для знищення невикористаних ресурсів класу.
  • Деструктори мають те саме ім’я, що і назва класу, що передує знаку (~).
  • На відміну від конструкторів, параметр деструктора не може бути.
  • Немає зворотного типу деструктора.
  • Якщо користувач не визначає деструктор самостійно в програмі, компілятор автоматично будує для нього один деструктор.
  • У одному класі не може бути більше одного деструктора.

Висновок

Наведений вище опис деструкторів чітко визначає використання та реалізацію деструктора в програмі C ++. Хоча концепція деструктора не є складною, проте перед її впровадженням у програму дуже важливо зрозуміти, оскільки неправильне використання деструктора може призвести до неочікуваних результатів.

Рекомендована стаття

Це посібник із програми Destructor на C ++. Тут ми обговорюємо Вступ до Destructor в C ++ та Робота Destructor разом з Перевагами. Ви також можете ознайомитися з іншими запропонованими нами статтями, щоб дізнатися більше -

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