Rekomenduojama, 2024

Redaktoriaus Pasirinkimas

Skirtumas tarp konstruktoriaus ir naikintojo

Kartais reikalaujama inicijuoti tam tikrą objekto dalį, kol ją galima panaudoti. Pavyzdžiui, mes dirbame ant kamino, prieš atlikdami bet kokį veiksmą, viršuje visada turi būti nustatytas nulis. Ši automatinio inicijavimo funkcija atliekama „Konstruktoriaus“ pagalba. Tikriausiai, jei objektas turi įvykdyti tam tikrą kodą prieš jį sunaikinant. Pavyzdžiui, jei objektui reikia uždaryti failą, kurį jis atidarė, prieš jo sunaikinimą. Jis gali būti atliekamas naudojant „Destructor“.

Apžvelgsime kai kuriuos pagrindinius skirtumus tarp konstruktoriaus ir destruktoriaus palyginimo lentelės pagalba

Palyginimo diagrama:

Palyginimo pagrindasKonstruktoriusDestruktorius
Tikslas
Jis skiria atmintį objektui.Jis skiria objekto atmintį.
Deklaracijaclass_name (argumentai, jei yra) {};~ class_name (be argumentų) {};
ArgumentaiKonstruktorius priima argumentą„Destructor“ nepriima jokių argumentų.
SkambinimasKonstruktorius vadinamas automatiškai, kai objektas sukuriamas.Destruktorius vadinamas automatiškai, nes blokas yra išjungtas arba programa baigiama.
DarbasKonstruktorius leidžia objektui inicijuoti tam tikrą vertę prieš tai, jis naudojamas.„Destructor“ leidžia objektui įvykdyti tam tikrą kodą jo sunaikinimo metu.
Vykdymo tvarka
Konstruktorius vadinamas eilės tvarka.
Destruktorius vadinamas atvirkštine konstruktoriaus tvarka.
SkaičiaiKlasėje gali būti daug konstruktorių.Tačiau klasėje visada yra vienas destruktorius.
Kopijavimo konstruktoriusKopijavimo konstruktorius leidžia konstruktoriui deklaruoti ir inicijuoti objektą iš kito objekto.Nėra tokios koncepcijos.
PerkrovaKonstruktoriai gali būti perkrauti.Destruktorius negali būti perkrautas.

Konstruktoriaus apibrėžimas:

Konstruktorius iš esmės yra klasės narys, kuris inicijuoja objektą ir priskiria jam atmintį. Konstruktoriai gali būti lengvai atpažįstami, nes jie yra paskelbti ir apibrėžti tokiu pačiu pavadinimu kaip ir klasė. Konstruktorius neturi jokio grąžinimo tipo; taigi, jie nieko negrąžina, net „negalioja“. Konstruktorius visada apibrėžiamas viešoje klasės dalyje.

Klasėje gali būti keli konstruktoriai; juos galima atskirti remiantis priimtų argumentų skaičiumi ir tipu. Jei klasėje yra keletas konstruktorių; netiesioginis konstruktorius (do-nieko konstruktorius) turi būti apibrėžtas kartu su jais; ji nieko nedaro, bet patenkina kompiliatorių.

Konstruktoriai taip pat gali būti apibrėžti su numatytais argumentais. Kadangi jie taip pat inicijuoja objektą „dinamiškai“. Konstruktoriai negali būti nei paveldimi, nei gali būti virtualūs, tačiau jie gali būti perkrauti. Jie negali būti nukreipti į jų adresą.

Konstruktoriaus įgyvendinimas:

 klasė Const {int a, b; public: Const () {// konstruktorius be parametro a = 0; b = 0; } Konst. (Int c, int d) {// konstruktorius su parametru a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // šis pareiškimas skatina konstruktorių} 

Kai C1 yra sukurtas, konstruktorius, kurio parametras nepasiekiamas, įvyksta, nes C1 neperduoda jokio parametro. Kadangi, kai C2 sukuriamas, įvykdomas konstruktorius su parametru, nes jis duoda sveikiems skaičiams konstruktoriui.

Destruktoriaus apibrėžimas:

„Destructor“ taip pat yra klasės funkcija, kuri paskirsto objektui priskirtą atmintį. Jis apibrėžiamas taip pat, kaip ir klasės pavadinimas, prieš kurį yra simbolis „tilde“ (~). Destruktoriai visada vadinami atvirkštine konstruktorių tvarka.

Klasėje visada yra vienas sunaikintuvas, nes jis nepriima jokių argumentų. Vietiniai objektai yra sunaikinami, kai tik kontroliuoja vykdymą bloką; kita vertus, pasauliniai objektai sunaikinami, kai visa programa baigiasi. Destuktorių netiesiogiai vadina kompiliatorius. Jei klasės yra paveldimos, o klasė yra kilusi iš tėvų klasės ir tiek vaikų klasė, tiek tėvų klasė turi destruktorių; tada išvestos klasės naikintojas vadinamas pirmiausia, po to seka patronuojančios klasės destruktorius.

Destruktoriaus įgyvendinimas:

 klasė Const {int a, b; viešas: Const (int c, int d) {// konstruktorius su parametru. a = c; c = d; cout << "a ir b vertė yra" < 

Kai sukuriamas C1 objektas, iškviečiamas konstruktorius su dviem sveikojo skaičiaus parametrais, o narys „a, b“ inicijuojamas, kai spausdinama „a, b“ reikšmė. Po to destruktorius bus iškviestas ir išspausdintas pranešimas „objektas C1 sunaikintas“.

Pagrindiniai skirtumai tarp konstruktorių ir naikintuvų

  1. Pagrindinis konstruktoriaus tikslas yra priskirti atmintį objektams, kai jie yra sukurti, o pagrindinis naikintojo tikslas - ištrinti objekto atmintį, kai ji sunaikinama.
  2. Konstruktoriui leidžiama priimti argumentus, nes argumentai gali būti naudojami duomenų grupės nariams inicijuoti. Sunaikintojas nepriima jokių argumentų, nes vienintelis jo darbas yra objekto atminties pašalinimas.
  3. Konstruktorius vadinamas, kai sukuriamas objektas. Kita vertus, naikintojas vadinamas, kai programa nutraukiama arba programa išeina iš bloko, kuriame sukurtas objektas.
  4. Konstruktorius paprastai naudojamas klasių duomenų nariams inicijuoti, o destruktorius naudojamas tam, kad objektas atliktų tam tikrą veiksmą prieš jį sunaikinant.
  5. Konstruktoriai vykdomi eilės tvarka, o tai reiškia, kad yra išvestinė klasė, kuri paveldi bazinę klasę, o išvestos klasės objektas sukuriamas tada, kai jis pirmą kartą paskambins bazinės klasės konstruktorių ir tada išvestinės klasės konstruktorių. Kita vertus, išvestos klasės naikintojas vadinamas pirmiausia, o tada bazinė klasė reiškia, kad destruktorius vykdomas atvirkštine konstruktoriaus tvarka.
  6. Klasėje gali būti keli konstruktoriai, kurie yra identifikuojami pagal priimtus skaičių argumentus. Klasėje yra tik vienas destruktorius.
  7. Yra kopijos konstruktoriaus sąvoka, kuri leidžia objektui inicijuoti iš kito objekto, o destruktorius neturi tokios sąvokos.
  8. Konstruktoriai gali būti perkrovos atlikti skirtingus veiksmus pagal to paties konstruktoriaus pavadinimą, o destruktoriai negali būti perkrauti.

Išvada:

Be panašumo, kad konstruktorius ir destruktorius yra ypatinga klasės nario funkcija ir turi tą patį pavadinimą, pagrindinis skirtumas tarp abiejų yra „konstruktorius“ vadinamas atminties paskirstymo metu ir „destruktorius“ vadinamas objektų atminties paskirstymo laikas. Tiek konstruktorius, tiek destruktorius yra netiesiogiai vadinami kompiliatoriumi, nors jie nėra apibrėžti klasėje.

Top