Pogledajmo neke osnovne razlike između konstruktora i destruktora uz pomoć usporedne tablice
Tablica usporedbe:
Osnova za usporedbu | Konstruktor | peć za sagorijevanje otpadaka |
---|---|---|
Svrha | Dodjeljuje memoriju objektu. | On oslobađa memoriju objekta. |
Deklaracija | class_name (argumenti ako postoje) {}; | ~ class_name (bez argumenata) {}; |
argumenti | Konstruktor prihvaća argument | Destructor ne prihvaća nikakve argumente. |
zvanje | Konstruktor se naziva automatski, dok je objekt kreiran. | Destructor se poziva automatski, budući da je blokiran ili program završava. |
Radna | Konstruktor 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 brojevima | U klasi može biti više konstruktora. | Ali uvijek postoji jedan destruktor u klasi. |
Kopiraj konstruktor | Konstruktor kopiranja omogućuje konstruktoru da deklarira i inicijalizira objekt iz drugog objekta. | Nema takvog koncepta. |
Prekomjerno opterećenje | Konstruktori 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
- Glavna svrha konstruktora je da dodijeli memoriju objektima kada su stvoreni, dok je glavna svrha destruktora raspodijeliti memoriju objekta kada je uništena.
- 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.
- 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.
- 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.
- 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.
- U klasi, može biti više konstruktora koji su identificirani brojem argumenta koji su prošli. U klasi postoji samo jedan destruktor.
- Postoji koncept konstruktora kopiranja koji omogućuje objektu da se inicijalizira iz nekog drugog objekta, dok destruktor nema takav koncept.
- 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.