Recomandat, 2022

Alegerea Editorului

Diferența între constructor și distructor

Uneori este necesară inițializarea unei părți a unui obiect înainte de a fi utilizată. De exemplu, operăm pe stivă, înainte de a efectua orice acțiune, partea de sus a stiva trebuie să fie întotdeauna setată la zero. Această caracteristică a inițializării automate se realizează prin "Constructor". Probabil, dacă un obiect trebuie să execute un cod înainte de a fi distrus. De exemplu, dacă un obiect trebuie să închidă un fișier pe care la deschis, înainte de distrugerea acestuia. Se poate realiza cu ajutorul "Destructor".

Să vedem câteva dintre diferențele de bază dintre constructor și distrugator cu ajutorul graficului de comparație

Diagramă de comparație:

Bazele de comparațieConstructordistrugător
Scop
El alocă memoria unui obiect.Dealochează memoria unui obiect.
Declaraţienume_clasă (argumente dacă există) {};~ class_name (fără argumente) {};
ArgumenteConstructorul acceptă argumentulDistructorul nu acceptă niciun argument.
apelConstructorul este chemat automat, în timp ce obiectul este creat.Destructorul este chemat automat, deoarece blocul este iesit sau programul se termina.
LucruConstructorul permite obiectului să inițializeze o parte din valoarea lui înainte, este utilizat.Destructorul permite obiectului să execute un anumit cod în momentul distrugerii acestuia.
Ordine de executare
Constructorul este chemat în ordine succesivă.
Destructorul este chemat în ordinea inversă a constructorului.
În cifreÎn clasă pot fi mai mulți constructori.Dar există întotdeauna un singur distrugător în clasă.
Copy ConstructorConstructorul de copiere permite unui constructor să declare și să inițializeze un obiect dintr-un alt obiect.Nu există un astfel de concept.
Peste încărcareConstructorii pot fi supraîncărcați.Distrugătorul nu poate fi supraîncărcat.

Definiția constructorului:

Un constructor este, în principiu, o funcție membră a clasei, care inițializează obiectul și alocă memorie acestuia. Constructorii pot fi ușor identificați deoarece sunt declarați și definiți cu același nume ca cel al clasei. Un constructor nu are niciun tip de retur; așa că nu întoarce nimic, nici măcar "vid". Un constructor este întotdeauna definit în secțiunea publică a unei clase.

Pot exista mai mulți constructori într-o clasă; ele pot fi diferențiate pe baza numărului și tipului de argumente adoptate. Dacă există mai mulți constructori într-o clasă; constructorul implicit (constructorul "nimic") trebuie definit împreună cu aceștia; nu face decât nimic, satisface compilatorul.

Constructorii pot fi de asemenea definiți cu argumentele implicite. În timp ce ele inițializează obiectul "dinamic". Constructorii nu pot fi moșteniți, nici nu pot fi virtuali, dar pot fi supraîncărcați. Ele nu pot fi menționate la adresa lor.

Implementarea constructorului:

 clasa Const {int a, b; public: Const () {// constructor fără parametru a = 0; b = 0; } Const (int c, int d) {// constructor cu parametrul a = c; c = d; }}; int principal () {Const C1; C2 (10, 20); // această declarație invocă constructorul} 

Atunci când se creează C1, un constructor fără parametru este executat, deoarece C1 nu trece nici un parametru. Întrucât, atunci când C2 este creat, un constructor cu parametru este executat, deoarece trece doi constructori întregi.

Definiția Destructor:

Un distructor este, de asemenea, o funcție membră a unei clase, care alocă memoria alocată unui obiect. Este definit cu același nume ca cel al unei clase, precedat de un simbol tildă (~). Distructoarele sunt întotdeauna chemate în ordinea inversă a constructorilor.

Există întotdeauna un singur distrugător într-o clasă, deoarece nu acceptă niciun argument. Obiectele locale sunt distruse de îndată ce controlul executării lasă blocul; pe de altă parte, obiectele globale sunt distruse atunci când întregul program se termină. Un destructor este implicit apelat de un compilator. Dacă clasele sunt moștenite, iar o clasă este derivată din clasa părinte și atât clasa copil, cât și clasa parentală au distrugătoare; atunci distrugătorul clasei derivate este numit mai întâi, urmat de distrugătorul clasei părinte.

Implementarea Destructorului:

 clasa Const {int a, b; public: Const (int c, int d) {// constructor cu parametru. a = c; c = d; cout << "valoarea a și b sunt" < 

Atunci când se creează obiectul C1, este invocat un constructor cu doi parametri de tip întreg și elementul "a, b" este inițializat peste valoarea "a, b". După ce distrugătorul se invocă și tipărește mesajul "obiectul C1 se distruge".

Diferența cheie între constructori și distrugătoare

  1. Scopul principal al unui constructor este de a aloca memorie obiectelor atunci când sunt create, în timp ce scopul principal al unui destructor este de a distinge memoria obiectului când acesta este distrus.
  2. Un constructor este autorizat să accepte argumentele, deoarece argumentele pot fi utilizate pentru a inițializa membrii de date ai clasei. Un destructor nu acceptă argumente, deoarece singura sa lucrare este de a distinge memoria obiectului.
  3. Se creează un constructor atunci când este creat un obiect. Pe de altă parte, un destructor este apelat când un program este terminat sau programul iese din blocul în care este creat obiectul.
  4. Un constructor este utilizat în general pentru a inițializa membrii de date ai clasei, în timp ce un destructor este folosit pentru a permite obiectului să efectueze o anumită acțiune înainte de a fi distrus.
  5. Constructorii sunt executați în ordine succesivă, ceea ce înseamnă că dacă există o clasă derivată care moștenește clasa de bază și obiectul clasei derivate este creat, atunci va numi mai întâi constructorul clasei de bază și apoi constructorul clasei derivate. Pe de altă parte, distrugătorul clasei derivate este numit mai întâi și apoi clasa de bază înseamnă că un destructor este executat în ordinea inversă a constructorului.
  6. În clasă, pot exista mai mulți constructori care sunt identificați prin numărul de argumente transmise. În clasă, există un singur distrugător.
  7. Există un concept de constructor de copiere care permite unui obiect să se inițieze de la un alt obiect, în timp ce distrugătorul nu are un astfel de concept.
  8. Constructorii pot fi supraîncărcați pentru a efectua acțiuni diferite sub numele aceluiași constructor, în timp ce distrugătorii nu pot fi supraîncărcați.

Concluzie:

Pe lângă asemănarea, acel constructor și distrugător sunt funcția membră specială a unei clase și au același nume, diferența de bază dintre amândouă este că "constructorul" este numit în momentul alocării memoriei și "destructorul" este chemat la timpul de delaocare a memoriei obiectelor. Atât constructorul, cât și distrugătorul sunt implicit numiți de compilator, chiar dacă nu sunt definiți în clasă.

Top