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

Автор: Laura McKinney
Дата Створення: 1 Квітень 2021
Дата Оновлення: 13 Травень 2024
Anonim
Выпуск 20. Абстрактные классы и интерфейсы. Разница
Відеоролик: Выпуск 20. Абстрактные классы и интерфейсы. Разница

Зміст


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

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

Розглянемо деякі основні відмінності між конструктором та деструктором за допомогою таблиці порівняння

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма:

Основа для порівнянняКонструкторДеструктор
Призначення

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

Конструктори викликаються в послідовному порядку.
Деструктори викликаються в зворотному порядку конструктора.
У числах У класі може бути кілька конструкторів.У класі завжди є один деструктор.
Конструктор копіювання Конструктор копіювання дозволяє конструктору оголошувати та ініціалізувати об’єкт від іншого об’єкта.Немає такої концепції.
Над завантаженням Конструктори можуть бути перевантажені.Деструктор не можна перевантажувати.


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

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

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

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


Типи конструкторів

В основному існує три типи конструкторів - за замовчуванням, параметризовані та копіювальні конструктори.

  • Конструктор за замовчуванням: Це конструктор, де аргументу не надано жодного аргументу. Конструктор за замовчуванням не має жодного параметра, але значення для конструктора за замовчуванням можуть передаватися за замовчуванням (динамічно).
  • Параметризований конструктор: Цей тип конструктора беруть аргументи; ми можемо передавати різні значення членам даних як аргументи.
  • Конструктор копіювання: Конструктор копіювання відрізняється від інших типів конструкторів тим, що він приймає адресу іншого об'єкта як аргумент.

Впровадження конструктора:

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

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

Визначення Destructor:

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

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

Впровадження Destructor:

клас 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. Конструктори можуть бути перевантажені, щоб виконувати різні дії під іменем одного конструктора. Навпаки, деструктори не можна перевантажувати.

Висновок:

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