Diferența dintre constructor și distrugător

Autor: Laura McKinney
Data Creației: 1 Aprilie 2021
Data Actualizării: 10 Mai 2024
Anonim
La ce vârstă o iau razna femeile și bărbații
Video: La ce vârstă o iau razna femeile și bărbații

Conţinut


Constructorul și distrugătorul sunt funcțiile de membru cu același nume ca și clasa lor. Primul tip constructor ajută la inițializarea unui obiect. În schimb, a distrugător este diferit de constructorul care șterge constructorul creat atunci când nu are niciun folos.

Uneori este necesar să inițializezi o parte a unui obiect înainte de a putea fi utilizat. De exemplu, operăm pe stivă, înainte de a efectua orice acțiune, partea superioară a stivei trebuie să fie întotdeauna setată la zero. Această caracteristică de inițializare automată este realizată prin „Constructor”. Cum ar fi, dacă un obiect trebuie să execute un cod înainte să fie distrus. De exemplu, dacă un obiect trebuie să închidă un fișier pe care l-a deschis, înainte de distrugerea acestuia. Poate fi realizat cu ajutorul „Distrugător”.

Să prezentăm câteva dintre diferențele fundamentale dintre constructor și distrugător cu ajutorul unui grafic de comparație


  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație:

Baza de comparațieConstructordistrugător
Scop

Alocă memoria unui obiect.Dealoca memoria unui obiect.
Declaraţie nume_ clasă (argumente dacă există) {};~ nume de clasă (fără argumente) {};
Argumente Constructorul acceptă argumentul Distrugătorul nu acceptă niciun argument.
apelConstructorul este apelat automat, în timp ce obiectul este creat.Distrugătorul este apelat automat, deoarece blocul este ieșit sau programul se încheie.
LucruConstructorul permite unui obiect să inițiale o parte din valoarea sa înainte de a fi folosit.Distrugătorul permite unui obiect să execute unele coduri în momentul distrugerii sale.
Ordinul de executare

Constructorii sunt numiți în ordine succesivă.
Distrugătorul se numește în ordine inversă a constructorului.
În numere Pot exista mai mulți constructori într-o clasă.Întotdeauna există un singur distrugător în clasă.
Copy Constructor Copiator constructor permite unui constructor să declare și să inițializeze un obiect din alt obiect.Nici un astfel de concept.
Peste încărcare Constructorii pot fi supraîncărcați.Distrugătorul nu poate fi supraîncărcat.


Definiția Constructor:

A constructor este practic o funcție de membru a clasei, care inițializează obiectul și îi alocă memorie. 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; deci, nu returnează nimic, nici măcar „nul”. Un constructor este întotdeauna definit în secțiunea publică a unei clase.

Pot exista mai mulți constructori într-o clasă; ele pot fi distinse în funcție de numărul și tipul de argumente transmise. Dacă există mai mulți constructori într-o clasă; constructorul implicit (constructorul nu face nimic) trebuie definit împreună cu aceștia; nu face altceva decât, satisface compilatorul.

Constructorii pot fi, de asemenea, definiți cu argumentele implicite. Întrucât, de asemenea, inițializează obiectul „dinamic”. Constructorii nu pot fi moșteniți și nici virtual, dar pot fi supraîncărcați. Nu li se poate trimite adresa.

Tipuri de constructori

Există practic trei tipuri de constructori - Constructori implicit, parametrizați și copie.

  • Constructor implicit: Este un constructor în care niciun argument nu este dat constructorului. Constructorul implicit nu are niciun parametru, dar valorile la constructorul implicit pot fi transmise în mod implicit (dinamic).
  • Constructor parametrizat: Acest tip de constructor ia argumentele; putem transmite diferite valori membrilor de date ca argumente.
  • Copy Constructor: Constructorul de copiere este diferit de alte tipuri de constructori, deoarece acceptă adresa celuilalt obiect ca argument.

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 main () {Const C1; C2 (10,20); // această afirmație invocă constructor}

Când este creat C1, un constructor fără parametru este executat, deoarece C1 nu trece niciun parametru. Întrucât, atunci când este creat C2, un constructor cu parametru este executat, deoarece trece două numere întregi către constructor.

Definiția Destructor:

A distrugător este, de asemenea, o funcție de membru a unei clase, care elimină memoria alocată unui obiect. Este definit cu același nume ca cel al unei clase, precedat de a tilda (~) simbol. Distrugătorii sunt întotdeauna numiți în ordine inversă a constructorilor.

Întotdeauna există un singur distrugător într-o clasă, deoarece nu acceptă niciun argument. Obiectele locale sunt distruse imediat ce controlul execuției părăsește blocul; pe de altă parte, obiectele globale sunt distruse la finalizarea întregului program. Un distrugător este numit implicit de un compilator. Dacă clasele sunt moștenite și o clasă este derivată dintr-o clasă părintească, și atât clasa copil, cât și clasa părinte au distrugători; apoi, distrugătorul clasei derivate este numit mai întâi, urmat de distrugătorul clasei părinte.

Implementarea Distrugătorului:

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

Când este creat obiectul C1, este invocat un constructor cu doi parametri de tip întreg și se inițializează „a, b” și se editează valoarea „a, b”. După ce distrugătorul este invocat și „obiectul C1 este distrus”.

Nevoia distrugătorului

Crearea constructorului consumă o cantitate mare de spațiu de memorie, deoarece în final alocă memorie obiectelor. Această memorie alocată trebuie alocată înainte de a distruge obiectele pentru a elibera resursele pentru alte sarcini. Distrugătorii sunt extrem de utili în scopul propus, care distruge eficient obiectele și îndeplinește sarcini de curățare pentru eliberarea memoriei.

  1. Scopul principal al unui constructor este de a aloca memorie obiectelor atunci când acestea sunt create. Spre deosebire, scopul principal al unui distrugător este de a aloca memoria obiectului atunci când acesta este distrus.
  2. Un constructor are voie să accepte argumentele, deoarece argumentele pot fi utilizate pentru inițializarea datelor membrilor clasei. Pe de altă parte, un distrugător nu acceptă niciun argument, deoarece singura sa lucrare este de a aloca memoria obiectului.
  3. Un constructor este numit atunci când este creat un obiect. În schimb, se numește un distrugător atunci când un program este încheiat sau programul iese din blocul în care este creat un obiect.
  4. Un constructor este de obicei utilizat pentru inițializarea membrilor de clasă, în timp ce un distrugător este folosit pentru a lăsa obiectul să efectueze unele acțiuni înainte de a fi distrus.
  5. Constructorii sunt executați în ordinea succesivă, ceea ce înseamnă că dacă există o clasă derivată care moștenește clasa de bază și este creat obiectul clasei derivate, atunci va apela mai întâi constructorul clasei de bază și apoi constructorul clasei derivate. În schimb, distrugătorul clasei derivate este numit mai întâi și apoi clasa de bază înseamnă că un destructor este executat în ordine inversă a constructorului.
  6. În clasă, pot exista mai mulți constructori care sunt identificați prin argumentele de număr transmise, în timp ce acesta poate avea un singur distrugător.
  7. Există un concept de constructor de copiere care permite inițializarea unui obiect de la un alt obiect, în timp ce distrugătorul nu are acest concept.
  8. Constructorii pot fi suprasolicitați pentru a efectua acțiuni diferite sub numele aceluiași constructor. Dimpotrivă, distrugătorii nu pot fi supraîncărcați.

Concluzie:

În afară de similitudine, faptul că constructorul și destructorul sunt funcția de membru special al unei clase și posedă același nume, diferența esențială între amândoi este că, „constructor” este numit în momentul alocării memoriei și se numește „distrugător” la ora dezafectare a memoriei obiectelor. Atât constructorul, cât și destructorul sunt numiți implicit de compilator, chiar dacă nu sunt definiți în clasă.