Препоръчано, 2024

Избор На Редактора

Разлика между конструктор и деструктор

Понякога е необходимо да се инициализира някаква част от обект, преди да може да се използва. Например, ние работим в стека, преди да извършим каквото и да е действие, горната част на стека винаги трябва да бъде настроена на нула. Тази функция на автоматична инициализация се извършва чрез 'Конструктор'. Вероятно, ако даден обект трябва да изпълни някой код, преди да бъде унищожен. Например, ако даден обект трябва да затвори файл, който е бил отворен, преди неговото унищожаване. Тя може да бъде изпълнена с помощта на „Destructor“.

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

Сравнителна диаграма:

Основа за сравнениеконструкторпещ за горене на отпадъци
Предназначение
Той разпределя паметта на обект.Той освобождава паметта на обект.
декларацияclass_name (аргументи, ако има такива) {};~ class_name (без аргументи) {};
АргументиКонструкторът приема аргументDestructor не приема никакви аргументи.
повикванеКонструкторът се извиква автоматично, докато обектът е създаден.Destructor се извиква автоматично, тъй като блокът се излиза или програмата се прекратява.
работнатаКонструкторът позволява на обекта да инициализира част от неговата стойност преди това да се използва.Destructor позволява на обекта да изпълни някой код в момента на неговото унищожаване.
Ред на изпълнение
Конструкторът се нарича последователно.
Деструкторът се извиква в обратен ред на конструктора.
В цифриВ класа може да има няколко конструктора.Но винаги има един единствен деструктор в класа.
Копирай конструктораКонструкторът за копиране позволява на конструктора да декларира и инициализира обект от друг обект.Няма такова понятие.
Над зарежданеКонструкторите могат да бъдат претоварени.Деструкторът не може да бъде претоварен.

Определение за конструктор:

Конструкторът е основно функция на класа, която инициализира обекта и му разпределя памет. Конструкторите могат лесно да бъдат идентифицирани, тъй като са декларирани и дефинирани със същото име като това на класа. Конструкторът няма никакъв тип връщане; така че те не връщат нищо, дори не са „нищожни“. Конструкторът винаги е дефиниран в публичната секция на даден клас.

В класа може да има множество конструктори; те могат да бъдат разграничени въз основа на броя и вида на приетите аргументи. Ако има няколко конструктора в един клас; имплицитен конструктор (do-nothing constructor) трябва да бъде дефиниран заедно с тях; той не прави нищо, но удовлетворява компилатора.

Конструкторите могат също да бъдат дефинирани с аргументите по подразбиране. Докато те също така инициализират обекта „динамично“. Конструкторите не могат нито да бъдат наследени, нито могат да бъдат виртуални, но могат да бъдат претоварени. Те не могат да бъдат препратени към адреса им.

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

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

Когато се създаде C1, се изпълнява конструктор без параметър, тъй като C1 не предава никакви параметри. Докато при създаването на С2 се изпълнява конструктор с параметър, той предава две цели числа на конструктора.

Дефиниция на деструктора:

Деструкторът е също членска функция на клас, който освобождава паметта, отпусната на обект. Той се дефинира със същото име като този на класа, предшестван от тилден (~) символ. Деструкторите винаги се наричат ​​в обратен ред на конструкторите.

Винаги има един единствен деструктор в клас, тъй като той не приема никакви аргументи. Локалните обекти се унищожават веднага след като контролът на изпълнението остави блока; от друга страна, глобалните обекти се унищожават, когато цялата програма се прекрати. Деструкторът се имплицитно извиква от компилатор. Ако класовете се наследяват, а класът се извлича от родителския клас, и дете клас и родителски клас имат деструктори; тогава деструкторът на извлечения клас се извиква първи, последван от деструктора на родителския клас.

Прилагане на Destructor:

 class Const {int a, b; public: Const (int c, int d) {// конструктор с параметър. а = С; с = г; cout << "стойност на a и b са" < 

Когато C1 обект е създаден, се извиква конструктор с два параметъра от тип integer и членът "a, b" се инициализира и се отпечатва стойността на "a, b". След като деструкторът се извика и отпечата съобщението "обект C1 се унищожава".

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

  1. Главната цел на конструктора е да разпредели паметта на обектите, когато те са създадени, докато основната цел на деструктора е да освободи паметта на обекта, когато се унищожи.
  2. Конструкторът може да приеме аргументите, тъй като аргументите могат да се използват за инициализиране на членовете на данните от класа. Деструкторът не приема никакви аргументи, тъй като единствената му работа е да освободи паметта на обекта.
  3. Конструктор се извиква, когато се създава обект. От друга страна, при прекратяване на програмата или излизане на програмата от блока, в който е създаден обект, се извиква деструктор.
  4. Конструкторът обикновено се използва за инициализиране на членовете на данните от класа, докато деструкторът се използва, за да позволи на обекта да извърши някакво действие, преди да бъде унищожено.
  5. Конструкторите се изпълняват в последователен ред, което означава, че ако има извлечен клас, който наследява базовия клас и се създава обектът на извлечения клас, той първо ще извика конструктора на базовия клас и след това конструктора на извлечения клас. От друга страна, деструкторът на извлечения клас се нарича първи, а след това базовият клас означава, че деструкторът се изпълнява в обратен ред на конструктора.
  6. В класа може да има няколко конструктора, които се идентифицират с предаваните аргументи. В клас има само един деструктор.
  7. Има концепция за конструктор на копиране, който позволява на обект да се инициализира от друг обект, докато деструкторът няма такава концепция.
  8. Конструкторите могат да бъдат претоварени, за да изпълняват различни действия под името на същия конструктор, докато деструкторите не могат да бъдат претоварени.

Заключение:

Освен сходството, конструкторът и деструкторът са специалната членна функция на класа и притежават едно и също име, основната разлика между тях е, че "конструкторът" се нарича по време на разпределението на паметта и се нарича "destructor" време на освобождаване на паметта на обектите. И двете конструктори и деструктори се имплицитно извикват от компилатора, въпреки че не са дефинирани в класа.

Top