Рекомендуємо, 2024

Вибір Редакції

Різниця між конструктором і деструктором

Іноді потрібно ініціалізувати деяку частину об'єкта, перш ніж він може бути використаний. Наприклад, ми працюємо на стеку, перш ніж виконувати будь-яку дію, верх стека завжди повинен бути встановлений в нуль. Ця функція автоматичної ініціалізації виконується через 'Конструктор'. Ймовірно, якщо об'єкт повинен виконати деякий код, перш ніж він буде знищений. Наприклад, якщо об'єкт повинен закрити файл, який він відкрив, перед його руйнуванням. Його можна виконати за допомогою 'Destructor'.

Давайте розглянемо деякі з основних відмінностей між конструктором і деструктором за допомогою діаграми порівняння

Діаграма порівняння:

Основа для порівнянняКонструкторДеструктор
Призначення
Він виділяє пам'ять об'єкту.Він позбавляє пам'ять об'єкта.
Деклараціяclass_name (аргументи, якщо є) {};~ class_name (без аргументів) {};
АргументиКонструктор приймає аргументДеструктор не приймає жодного аргументу.
ВикликКонструктор викликається автоматично, під час створення об'єкта.Деструктор викликається автоматично, так як блок виходить або програма припиняється.
РоботаКонструктор дозволяє об'єкту ініціалізувати деяке його значення раніше, він використовується.Деструктор дозволяє об'єкту виконати деякий код під час його руйнування.
Порядок виконання
Конструктор викликається послідовно.
Деструктор викликається в зворотному порядку конструктора.
У цифрахУ класі може бути декілька конструкторів.Але в класі завжди є єдиний деструктор.
Копіювати конструкторКонструктор копіювання дозволяє конструктору оголошувати і ініціалізувати об'єкт з іншого об'єкта.Такого поняття немає.
ПеревантаженняКонструктори можуть бути перевантажені.Деструктор не може бути перевантажений.

Визначення конструктора:

Конструктор є основною функцією-членом класу, який ініціалізує об'єкт і виділяє йому пам'ять. Конструктори можуть бути легко ідентифіковані, оскільки вони оголошені і визначені з тією ж назвою, що й у класу. Конструктор не має типу повернення; отже, вони нічого не повертають, навіть не «порожніми». Конструктор завжди визначається у відкритому розділі класу.

У класі можуть бути декілька конструкторів; їх можна розрізняти за кількістю і типом переданих аргументів. Якщо в класі є кілька конструкторів; неявний конструктор (конструктор do-nothing) повинен бути визначений разом з ними; він нічого не робить, але задовольняє компілятору.

Конструктори також можуть бути визначені за допомогою аргументів за замовчуванням. У той же час, вони також ініціалізують об'єкт «динамічно». Конструктори не можуть ні бути успадкованими, ні віртуальними, але вони можуть бути перевантажені. Вони не можуть бути передані на їх адресу.

Реалізація конструктора:

 class Const {int a, b; public: Const () {// конструктор без параметра a = 0; b = 0; } Const (int c, int d) {// конструктор з параметром a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // це оператор викликає конструктор} 

При створенні C1 виконується конструктор без параметра, оскільки C1 не передає жодного параметра. У той час як при створенні C2 виконується конструктор з параметром, оскільки він передає конструктору два цілих числа.

Визначення деструктора:

Деструктор також є функцією-членом класу, який звільняє пам'ять, виділену об'єкту. Він визначається з тим же ім'ям, що і клас, якому передує символ тильди (~). Деструктори завжди викликаються в зворотному порядку конструкторів.

У класі завжди є один деструктор, оскільки він не приймає жодних аргументів. Локальні об'єкти руйнуються, як тільки керування виконанням залишає блок; з іншого боку, глобальні об'єкти руйнуються, коли завершується вся програма. Деструктор неявно викликається компілятором. Якщо класи успадковані, а клас походить від батьківського класу, то і дочірній клас і батьківський клас мають деструктори; потім деструктор похідного класу називається першим, за ним йде деструктор батьківського класу.

Реалізація деструктора:

 class Const {int a, b; public: Const (int c, int d) {// конструктор з параметром. a = c; c = d; cout << "значення a і b є" < 

Коли створюється об'єкт C1, викликається конструктор з двома параметрами цілочисельного типу і ініціалізується член «a, b» і друкується значення «a, b». Після того, як деструктор викликається і друкується повідомлення "об'єкт C1 знищується".

Ключові відмінності між конструкторами і деструкторами

  1. Основною метою конструктора є виділення пам'яті об'єктам, коли вони створені, тоді як основною метою деструктора є вилучення пам'яті об'єкта, коли воно знищується.
  2. Конструктору дозволяється приймати аргументи, оскільки аргументи можуть бути використані для ініціалізації членів даних класу. Деструктор не приймає жодних аргументів, оскільки його єдина робота полягає в тому, щоб звільнити пам'ять об'єкта.
  3. Конструктор викликається при створенні об'єкта. З іншого боку, деструктор викликається, коли програма припиняється або програма виходить з блоку, в якому створюється об'єкт.
  4. Конструктор, як правило, використовується для ініціалізації членів даних класу, в той час як деструктор використовується, щоб об'єкт виконав деяку дію, перш ніж він буде знищений.
  5. Конструктори виконуються в послідовному порядку, тобто, якщо існує похідний клас, який успадковує базовий клас, і об'єкт похідного класу створюється, то спочатку він викликає конструктор базового класу, а потім конструктор похідного класу. З іншого боку, деструктор похідного класу називається спочатку, а потім базовий клас означає, що деструктор виконується в зворотному порядку конструктора.
  6. У класі можуть бути декілька конструкторів, які ідентифікуються за допомогою переданих аргументів. У класі є тільки один деструктор.
  7. Існує концепція конструктора копіювання, яка дозволяє об'єкту ініціалізуватися з іншого об'єкта, тоді як деструктор не має такої концепції.
  8. Конструктори можуть бути перевантажені для виконання різних дій під ім'ям того ж конструктора, тоді як деструктори не можуть бути перевантажені.

Висновок:

Крім подібності, що конструктор і деструктор є спеціальною функцією-членом класу, і володіють однаковою назвою, основною відмінністю між ними є, що "конструктор" викликається в момент виділення пам'яті, а "деструктор" викликається час видалення пам'яті об'єктів. І конструктор, і деструктор неявно викликаються компілятором, навіть якщо вони не визначені в класі.

Top