Apskatīsim dažas no galvenajām atšķirībām starp konstruktoru un destruktoru ar salīdzinājuma diagrammas palīdzību
Salīdzinājuma diagramma:
Salīdzināšanas pamats | Konstruktors | Destruktors |
---|---|---|
Mērķis | Tā piešķir atmiņu objektam. | Tā izplata objekta atmiņu. |
Deklarācija | klases nosaukums (argumenti, ja tādi ir) {}; | ~ class_name (bez argumentiem) {}; |
Argumenti | Konstruktors pieņem argumentu | Destructor nepieņem nekādus argumentus. |
Zvanīšana | Konstruktors tiek automātiski izsaukts, kamēr objekts tiek izveidots. | Destruktors tiek automātiski izsaukts, jo bloks ir iziets vai programma beidzas. |
Darbs | Konstruktors ļauj objektam inicializēt kādu no tās vērtībām pirms tā tiek izmantots. | Destructor ļauj objektam izpildīt kādu kodu tās iznīcināšanas laikā. |
Izpildes kārtība | Konstruktors tiek izsaukts secīgā secībā. | Destruktors tiek izsaukts konstruktora pretējā secībā. |
Skaitļos | Klasē var būt vairāki konstruktori. | Bet klasē vienmēr ir viens destruktors. |
Kopēšanas konstruktors | Kopēšanas konstruktors ļauj konstruktoram paziņot un inicializēt objektu no cita objekta. | Šādas koncepcijas nav. |
Pārsūtīšana | Konstruktori var tikt pārslogoti. | Destruktoru nevar pārslogot. |
Konstruktora definīcija:
Konstruktors būtībā ir klases biedru funkcija, kas inicializē objektu un piešķir tam atmiņu. Konstruktorus var viegli identificēt, jo tie ir deklarēti un definēti ar tādu pašu nosaukumu kā klasei. Konstruktoram nav atgriešanās veida; tā, viņi neko neatgriež, pat ne “spēkā neesošu”. Konstruktors vienmēr ir definēts klases publiskajā daļā.
Klasē var būt vairāki konstruktori; tos var atšķirt, pamatojoties uz pieņemto argumentu skaitu un veidu. Ja klasē ir vairāki konstruktori; netieši konstruktors (do-nothing konstruktors) ir jādefinē kopā ar tiem; tas neko nedara, bet apmierina kompilatoru.
Konstruktorus var definēt arī ar noklusējuma argumentiem. Tā kā tie arī inicializē objektu „dinamiski”. Konstruktori nevar būt ne mantojami, ne arī virtuāli, bet tos var pārslogot. Viņus nevar atsaukties uz viņu adresi.
Konstruktora īstenošana:
klase Const {int a, b; public: Const () {// konstruktors bez parametra a = 0; b = 0; } Const (int c, int d) {// konstruktors ar parametru a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // šis paziņojums atsauc konstruktoru}
Kad C1 tiek izveidots, konstruktors bez parametriem tiek izpildīts, jo C1 neiztur nevienu parametru. Savukārt, kad C2 tiek izveidots, izpildītājs izpilda konstruktoru ar parametru, jo tas iziet konstruktoram divus veselus skaitļus.
Destruktora definīcija:
Destruktors ir arī klases funkcijas funkcija, kas izplata objektam piešķirto atmiņu. To definē ar tādu pašu nosaukumu kā klasē, pirms kura ir simbols tilde (~). Destruktori vienmēr tiek aicināti konstruktoru pretējā secībā.
Vienā klasē vienmēr ir viens destruktors, jo tas nepieņem nekādus argumentus. Vietējie objekti tiek iznīcināti, tiklīdz izpildes kontrole kontrolē bloku; no otras puses, globālie objekti tiek iznīcināti, kad beidzas visa programma. Destruktoru netieši sauc par kompilatoru. Ja nodarbības ir iedzimtas, un klasi iegūst no vecāku klases, un gan bērna klasei, gan vecākajai klasei ir destruktori; tad atvasinātās klases destruktors tiek saukts vispirms, kam seko mātes klases destruktors.
Destruktora īstenošana:
klase Const {int a, b; public: Const (int c, int d) {// konstruktors ar parametru. a = c; c = d; cout << "a un b vērtība ir" <Kad tiek izveidots C1 objekts, tiek izmantots konstruktors ar diviem vesela skaitļa parametriem, un loceklis “a, b” tiek inicializēts, ja tiek izdrukāta “a, b” vērtība. Pēc tam destruktors tiek izmantots un izdrukāts ziņojums “Objekts C1 tiek iznīcināts”.
Galvenā atšķirība starp konstruktoriem un iznīcinātājiem
- Konstruktora galvenais mērķis ir piešķirt atmiņai objektus, kad tie tiek radīti, bet destruktora galvenais mērķis ir iznīcināt objekta atmiņu, kad tas tiek iznīcināts.
- Konstruktoram ir atļauts pieņemt argumentus, jo argumentus var izmantot, lai inicializētu klases datus. Destruktors nepieņem nekādus argumentus, jo tā vienīgais darbs ir objekta atmiņas atdalīšana.
- Konstruktors tiek izsaukts, kad tiek izveidots objekts. No otras puses, iznīcinātājs tiek izsaukts, kad programma tiek pārtraukta, vai programma iziet no bloka, kurā tiek izveidots objekts.
- Konstruktoru parasti izmanto, lai inicializētu klases dalībniekus, bet destruktors tiek izmantots, lai ļautu objektam veikt dažas darbības, pirms tas tiek iznīcināts.
- Konstruktori tiek izpildīti secīgā secībā, kas nozīmē, ja ir atvasināta klase, kas pārņem bāzes klasi, un atvasinātās klases objekts tiek izveidots, tad tas vispirms izsauks bāzes klases konstruktoru un pēc tam atvasinātās klases konstruktoru. No otras puses, atvasinātās klases destruktors tiek saukts vispirms un pēc tam bāzes klase nozīmē, ka destruktors tiek izpildīts konstruktora apgrieztā secībā.
- Klasē var būt vairāki konstruktori, kas identificēti ar pieņemto numuru argumentiem. Klasē ir tikai viens destruktors.
- Pastāv kopijas konstruktora koncepcija, kas ļauj objektam inicializēties no cita objekta, bet destruktoram nav šādas koncepcijas.
- Konstruktori var būt pārslodze, lai veiktu dažādas darbības ar viena konstruktora nosaukumu, bet destruktori nevar tikt pārslogoti.
Secinājums:
Bez līdzības, ka konstruktors un destruktors ir klases īpaša biedru funkcija, un tiem ir tāds pats nosaukums, galvenā atšķirība starp abiem ir, “konstruktors” tiek izsaukts brīdī, kad atmiņa tiek piešķirta, un “destruktors” tiek aicināts objektu atmiņas laiks. Gan konstruktors, gan destruktors netieši tiek saukts par kompilatoru, lai gan tās nav definētas klasē.