Skirtumas tarp konstruktoriaus ir naikintojo

Autorius: Laura McKinney
Kūrybos Data: 1 Balandis 2021
Atnaujinimo Data: 7 Gegužė 2024
Anonim
Destructors in C++
Video.: Destructors in C++

Turinys


Konstruktorius ir naikintojas yra narių funkcijos tuo pačiu pavadinimu, kaip ir jų klasė. Buvęs tipas konstruktorius padeda inicijuoti objektą. Priešingai, a naikintojas skiriasi nuo konstruktoriaus, kuris panaikina sukurtą konstruktorių, kai jis nenaudingas.

Kartais, norint ją panaudoti, reikia inicijuoti kokią nors objekto dalį. Pvz., Mes dirbame rietuvėje, prieš atlikdami kokius nors veiksmus, rietuvės viršutinė dalis visada turi būti nustatyta į nulį. Ši automatinio inicijavimo funkcija atliekama naudojant „Constructor“. Pavyzdžiui, jei objektui reikia įvykdyti tam tikrą kodą prieš jį sunaikinant. Pvz., Jei objektui reikia uždaryti failą, kurį jis atidarė prieš sunaikindamas. Tai galima atlikti pasitelkiant „naikintoją“.

Palyginkime diagramą, apžvelkime keletą esminių konstruktoriaus ir destruktoriaus skirtumų

  1. Palyginimo diagrama
  2. Apibrėžimas
  3. Pagrindiniai skirtumai
  4. Išvada

Palyginimo diagrama:

Palyginimo pagrindasKonstruktoriusNaikintojas
Tikslas

Jis skiria atmintį objektui.Tai skiria objekto atmintį.
Deklaracija klasės_pavadinimas (jei yra argumentų) {};~ klasės_vardas (jokių argumentų) {};
Argumentai Konstruktorius sutinka su argumentu Naikintojas nepriima jokio argumento.
SkambinaKonstruktorius iškviečiamas automatiškai, kol sukuriamas objektas.Naikintojas iškviečiamas automatiškai, kai blokas išeina arba programa pasibaigia.
DirbaKonstruktorius leidžia objektui inicijuoti tam tikrą jo vertę anksčiau, jis yra naudojamas.Naikintojas leidžia objektui įvykdyti tam tikrą kodą jo sunaikinimo metu.
Vykdymo tvarka

Konstruktoriai vadinami iš eilės.
Naikintojai vadinami konstruktoriaus atvirkštine tvarka.
Skaičiais Klasėje gali būti keli konstruktoriai.Klasėje visada yra vienas naikintojas.
Kopijavimo konstruktorius Konstruktoriaus kopijavimas leidžia konstruktoriui deklaruoti ir inicijuoti objektą iš kito objekto.Nėra tokios koncepcijos.
Perkraunama Konstruktoriai gali būti perkrauti.Naikintojas negali būti perkrautas.


Konstruktoriaus apibrėžimas:

A konstruktorius iš esmės yra klasės nario funkcija, kuri inicijuoja objektą ir skiria jam atmintį. Konstruktorius galima nesunkiai atpažinti, nes jie deklaruojami ir apibrėžiami tuo pačiu pavadinimu kaip ir klasės. 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 pagal pateiktų argumentų skaičių ir tipą. Jei klasėje yra keli konstruktoriai; kartu su jais turi būti apibrėžtas netiesioginis konstruktorius („nieko nedaryk“); tai nieko nedaro, bet patenkina kompiliatorių.

Konstruktorius taip pat galima apibrėžti naudojant numatytuosius argumentus. Tuo tarpu jie taip pat objektą inicijuoja „dinamiškai“. Konstruktoriai negali būti nei paveldėti, nei virtualūs, tačiau gali būti perkrauti. Jiems negalima nurodyti savo adreso.

Konstruktorių tipai

Iš esmės yra trys konstruktorių tipai - numatytieji, parametriniai ir kopijavimo konstruktoriai.


  • Numatytasis konstruktorius: Tai konstruktorius, kuriam konstruktorius nepateikiamas. Numatytasis konstruktorius neturi parametro, tačiau reikšmes numatytajam konstruktoriui galima perduoti pagal numatytuosius nustatymus (dinamiškai).
  • Parametrizuotas konstruktorius: Šio tipo konstruktoriai priima argumentus; duomenų argumentams galime perduoti skirtingas vertes.
  • Kopijavimo konstruktorius: Kopijavimo konstruktorius skiriasi nuo kitų tipų konstruktorių, nes jis kaip argumentą priima kito objekto adresą.

Konstruktoriaus įgyvendinimas:

klasė Const {int a, b; public: Const () // konstruktorius be parametro {a = 0; b = 0; } Const (int c, int d) {// konstruktorius, kurio parametras a = c; c = d; }}; int main () {Const C1; C2 (10,20); // šis teiginys kviečia konstruktorių}

Kai sukuriamas C1 konstruktorius, kuriame nėra parametrų, jis vykdomas, nes C1 neperduoda jokio parametro. Tuo tarpu kai sukuriamas C2, konstruktorius su parametru tampa vykdomas, nes jis perduoda konstruktoriui du sveikus skaičius.

Naikintojo apibrėžimas:

A Naikintojas taip pat yra klasės, priklausančios objektui, atmintis, nario funkcija. Jis apibūdinamas tuo pačiu pavadinimu kaip klasės pavadinimas, prieš kurį rašoma a tilde (~) simbolis. Naikintojai visada vadinami atvirkštine konstruktorių tvarka.

Klasėje visada yra vienas naikintojas, nes ji nepriima jokių argumentų. Vietiniai objektai sunaikinami, kai tik vykdymo kontrolė palieka bloką; kita vertus, globalūs objektai sunaikinami pasibaigus visai programai. Sunaikintoją netiesiogiai pašaukia kompiliatorius. Jei klasės yra paveldimos, o klasė yra išvedama iš tėvų klasės, ir vaiko, ir tėvų klasėje yra destruktorių; tada pirmiausia vadinamas išvestinės klasės destruktorius, po kurio eina pagrindinės klasės destruktorius.

Naikintojo įgyvendinimas:

klasė Const {int a, b; public: Const (int c, int d) // konstruktorius su parametru. {a = c; c = d; cout << "reikšmės a ir b yra" <<>

Kai sukuriamas objektas C1, iškviečiamas konstruktorius, turintis du sveikojo tipo parametrus, o elementas „a, b“ inicijuojamas ir „a, b“ reikšmė suredaguojama. Po to griaunamasis sunaikinamas ir „objektas C1 sunaikinamas“.

Naikintojo poreikis

Sukūrus konstruktorių, sunaudojama šiek tiek atminties, nes jis galiausiai skiria atmintį objektams. Ši sunaikinta atmintis turi būti paskirstyta prieš sunaikinant objektus, kad būtų atlaisvinti ištekliai kitoms užduotims atlikti. Naikintojai yra labai naudingi numatytam tikslui, kuris efektyviai sunaikina daiktus ir vykdo valymo užduotis atlaisvinti atmintį.

  1. Pagrindinis konstruktoriaus tikslas yra skirti atmintį objektams, kai jie yra kuriami. Priešingai, pagrindinis naikintojo tikslas yra nustatyti objekto atmintį, kai jis sunaikinamas.
  2. Konstruktoriui leidžiama sutikti su argumentais, nes argumentai gali būti naudojami norint inicijuoti klasės duomenų narius. Kita vertus, naikintojas nepriima jokių argumentų, nes jo vienintelis darbas yra sutelkti objekto atmintį.
  3. Sukuriamas objektas, vadinamas konstruktoriumi. Skirtingai nuo destruktoriaus iškviečiamas, kai programa nutraukiama arba programa išeina iš bloko, kuriame sukuriamas objektas.
  4. Paprastai konstruktorius yra naudojamas klasės duomenims inicijuoti, tuo tarpu destruktorius naudojamas tam, kad objektas atliktų tam tikrus veiksmus prieš sunaikinant.
  5. Konstruktoriai vykdomi paeiliui, tai yra, jei yra išvestinė klasė, kuri paveldi pagrindinę klasę, ir sukuriamas išvestinės klasės objektas, tada pirmiausia jis iškviečia bazinės klasės konstruktorių, o paskui išvestinės klasės konstruktorių. Atvirkščiai, išvestinės klasės destruktorius vadinamas pirmuoju, o paskui - pagrindine klase, tai reiškia, kad destruktorius vykdomas konstruktoriaus atvirkštine tvarka.
  6. Klasėje gali būti keli konstruktoriai, kurie atpažįstami pagal pateiktus skaičių argumentus, tuo tarpu jis gali turėti tik vieną destruktorių.
  7. Yra egzempliorių konstruktoriaus koncepcija, leidžianti objektą inicijuoti iš kito objekto, o griovėjas tokios koncepcijos neturi.
  8. Konstruktoriai gali būti perkrauti, kad atliktų skirtingus veiksmus tuo pačiu konstruktoriaus vardu. Priešingai, destruktorių negalima perkrauti.

Išvada:

Be panašumo, kad konstruktorius ir destruktorius yra specialioji klasės narių funkcija ir turi tą patį pavadinimą, esminis skirtumas tarp jų yra tas, kad atminties paskirstymo metu yra vadinamas „konstruktorius“, o „destruktorius“ vadinamas. objektų atminties paskirstymo laikas. Tiek konstruktorius, tiek destruktorius netiesiogiai kviečiami sudarytojo, net jei jie klasėje nėra apibrėžti.