Preporučeno, 2024

Izbor Urednika

Razlika između konstruktora i razarača

Ponekad je potrebno inicijalizirati neki dio objekta prije njegovog korištenja. Na primjer, radimo na stog, prije nego što izvršimo bilo koju radnju, vrh stog uvijek mora biti postavljen na nulu. Ova značajka automatske inicijalizacije provodi se kroz 'Konstruktor'. Vjerojatno, ako objekt treba izvršiti neki kôd prije uništenja. Na primjer, ako objekt treba zatvoriti datoteku koju je otvorio, prije njezina uništenja. Može se izvesti uz pomoć 'Destructor'.

Pogledajmo neke osnovne razlike između konstruktora i destruktora uz pomoć usporedne tablice

Tablica usporedbe:

Osnova za usporedbuKonstruktorpeć za sagorijevanje otpadaka
Svrha
Dodjeljuje memoriju objektu.On oslobađa memoriju objekta.
Deklaracijaclass_name (argumenti ako postoje) {};~ class_name (bez argumenata) {};
argumentiKonstruktor prihvaća argumentDestructor ne prihvaća nikakve argumente.
zvanjeKonstruktor se naziva automatski, dok je objekt kreiran.Destructor se poziva automatski, budući da je blokiran ili program završava.
RadnaKonstruktor dopušta objektu da inicijalizira neku vrijednost prije, koristi se.Destructor omogućuje objektu da izvrši neki kod u vrijeme njegova uništenja.
Redoslijed izvršenja
Konstruktor se poziva u slijedu.
Destructor se poziva u obrnutom redoslijedu konstruktora.
U brojevimaU klasi može biti više konstruktora.Ali uvijek postoji jedan destruktor u klasi.
Kopiraj konstruktorKonstruktor kopiranja omogućuje konstruktoru da deklarira i inicijalizira objekt iz drugog objekta.Nema takvog koncepta.
Prekomjerno opterećenjeKonstruktori mogu biti preopterećeni.Uništač se ne može preopteretiti.

Definicija konstruktora:

Konstruktor je u osnovi članska funkcija klase koja inicijalizira objekt i dodjeljuje mu memoriju. Konstruktori se mogu lako identificirati jer su deklarirani i definirani s istim imenom kao i klasa. Konstruktor nema povratni tip; dakle, oni ništa ne vraćaju, čak nisu ni „prazni“. Konstruktor je uvijek definiran u javnom odjeljku klase.

U klasi može biti više konstruktora; mogu se razlikovati na temelju broja i vrste argumenta koji su prošli. Ako u klasi postoji više konstruktora; implicitni konstruktor (do-nothing constructor) mora biti definiran zajedno s njima; on ništa ne radi, nego zadovoljava kompajler.

Konstruktori se također mogu definirati s defaultnim argumentima. Dok oni također inicijaliziraju objekt “dinamički”. Konstruktori se ne mogu naslijediti, niti mogu biti virtualni, ali mogu biti preopterećeni. Ne mogu se uputiti na njihovu adresu.

Implementacija konstruktora:

 klasa Const {int a, b; public: Const () {// konstruktor bez parametra a = 0; b = 0; } Const (int c, int d) {// konstruktor s parametrom a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // ova naredba poziva konstruktora 

Kada se kreira C1, izvršava se konstruktor bez parametra, jer C1 ne prolazi nijedan parametar. Dok, kada je C2 stvoren, konstruktor s parametrom se izvršava, jer konstruktoru daje dva cijela broja.

Definicija destruktora:

Destructor je i članska klasa klase, koja oslobađa memoriju dodijeljenu objektu. Definiran je s istim imenom kao i klasa, kojoj prethodi simbol tilda (~). Destruktori se uvijek pozivaju obrnutim redoslijedom od konstruktora.

U klasi uvijek postoji jedan destruktor jer ne prihvaća nikakve argumente. Lokalni objekti se uništavaju čim kontrola izvršenja ostavi blok; s druge strane, globalni objekti se uništavaju kada se cijeli program završi. Prekidač je implicitno nazvan od strane kompilatora. Ako su klase naslijeđene, a klasa je izvedena iz roditeljske klase i klase podređene i roditeljska klasa imaju destruktore; tada se najprije zove destruktor izvedene klase, nakon čega slijedi destruktor roditeljske klase.

Implementacija destruktora:

 klasa Const {int a, b; public: Const (int c, int d) {// konstruktor s parametrom. A = C; c = d; cout << "vrijednost a i b su" < 

Kada je C1 objekt stvoren, poziva se konstruktor s dva parametra cjelobrojnog tipa, a član “a, b” se inicijalizira i ispisuje se vrijednost “a, b”. Nakon toga se aktivira destruktor i ispiše poruka "objekt C1 se uništi".

Ključne razlike između konstruktora i destruktora

  1. Glavna svrha konstruktora je da dodijeli memoriju objektima kada su stvoreni, dok je glavna svrha destruktora raspodijeliti memoriju objekta kada je uništena.
  2. Konstruktor može prihvatiti argumente kao argumente koji se mogu koristiti za inicijalizaciju podataka članova klase. A destruktor ne prihvaća nikakve argumente jer je jedini zadatak da razriješi memoriju objekta.
  3. Konstruktor se poziva kada je objekt izrađen. S druge strane, destruktor se poziva kada se program završi ili program napusti blok u kojem je objekt kreiran.
  4. Konstruktor se obično koristi za inicijalizaciju podataka članova klase, dok, destructor se koriste kako bi objekt obaviti neke akcije prije nego što je uništen.
  5. Konstruktori se izvršavaju u redoslijedu koji slijedi, što znači ako postoji izvedena klasa koja nasljeđuje osnovnu klasu i kreira se objekt izvedene klase, tada će prvo pozvati konstruktora osnovne klase, a zatim konstruktora izvedene klase. S druge strane, destruktor izvedene klase naziva se prvo, a zatim osnovna klasa znači da se destruktor izvodi u obrnutom redoslijedu konstruktora.
  6. U klasi, može biti više konstruktora koji su identificirani brojem argumenta koji su prošli. U klasi postoji samo jedan destruktor.
  7. Postoji koncept konstruktora kopiranja koji omogućuje objektu da se inicijalizira iz nekog drugog objekta, dok destruktor nema takav koncept.
  8. Konstruktori mogu biti preopterećeni za izvođenje različitih akcija pod imenom istog konstruktora, dok se destruktori ne mogu preopteretiti.

Zaključak:

Osim sličnosti, konstruktor i destruktor su posebna funkcija člana klase, i posjeduju isto ime, osnovna razlika između njih je, 'konstruktor' se zove u vrijeme dodjele memorije i 'destructor' se zove na vrijeme oduzimanja memorije objekata. Kompajler implicitno poziva i konstruktora i destruktora, iako oni nisu definirani u klasi.

Top