Razlika med konstruktorjem in destruktorjem

Avtor: Laura McKinney
Datum Ustvarjanja: 1 April 2021
Datum Posodobitve: 13 Maj 2024
Anonim
Konstrakta ‘In Corpore Sano’ REACTION | Serbia Eurovision 2022 REACTION | | KONSTRAKTA REACTION
Video.: Konstrakta ‘In Corpore Sano’ REACTION | Serbia Eurovision 2022 REACTION | | KONSTRAKTA REACTION

Vsebina


Konstruktor in destruktor sta funkciji člana z istim imenom kot njihov razred. Nekdanja vrsta konstruktor pomaga pri inicijalizaciji predmeta. In obratno, a uničevalnik se razlikuje od konstruktorja, ki izbriše ustvarjenega konstruktorja, kadar ne koristi.

Včasih je treba inicializirati del predmeta, preden ga lahko uporabimo. Na primer, delujemo na skladovnici, preden izvedemo katero koli dejanje, mora biti zgornji del vedno nastavljen na nič. Ta funkcija samodejne inicializacije se izvede prek „Constructor“. Če je predmet treba izvesti neko kodo, preden jo uniči. Na primer, če mora objekt pred uničenjem zapreti datoteko, ki jo je odprl. Izvaja se lahko s pomočjo "Destruktorja".

Oglejmo si nekaj osnovnih razlik med konstruktorjem in destruktorjem s primerjalno tabelo

  1. Primerjalna tabela
  2. Opredelitev
  3. Ključne razlike
  4. Zaključek

Primerjalna tabela:

Osnove za primerjavoKonstruktorDestruktor
Namen

Predmetu dodeli pomnilnik.Ta obravnava spomin predmeta.
Izjava ime_ razreda (če obstajajo argumenti) {};~ class_name (brez argumentov) {};
Argumenti Konstruktor sprejme argument Destruktor ne sprejema nobenega argumenta.
KlicanjeMed ustvarjanjem objekta se konstruktor pokliče samodejno.Destruktor se pokliče samodejno, ko zapusti blok ali program preneha.
DeloKonstruktor dovoli predmetu, da pred tem inicializira nekaj svoje vrednosti, ga uporabi.Destruktor omogoča predmetu, da v času uničenja izvede neko kodo.
Vrstni red izvršbe

Konstruktorji se pokličejo po zaporedju.
Destruktorji se imenujejo v obratnem vrstnem redu konstruktorja.
V številkah V razredu je lahko več konstruktorjev.V razredu je vedno en sam uničevalec.
Konstruktor kopiranja Konstruktor kopiranja omogoča konstruktorju izjavo in inicializacijo predmeta iz drugega predmeta.Ni takšnega koncepta.
Preobremenitev Konstruktorji so lahko preobremenjeni.Destruktorja ni mogoče preobremeniti.


Opredelitev izvajalca:

A konstruktor je v osnovi članska funkcija razreda, ki objekt inicializira in mu dodeli spomin. Konstruktorje je mogoče zlahka prepoznati, saj so deklarirani in definirani z istim imenom kot razred. Konstruktor nima povratnega tipa; torej ne vrnejo ničesar, niti 'ničnega'. Konstruktor je vedno opredeljen v javnem delu razreda.

V razredu je lahko več konstruktorjev; ločimo jih lahko glede na število in vrsto argumentov, ki so bili podani. Če je v razredu več konstruktorjev; implicitni konstruktor (konstruktor, ki ne dela nič), mora biti definiran skupaj z njimi; ne naredi nič drugega, zadovolji prevajalnik.

Konstruktorje lahko definirate tudi s privzetimi argumenti. Medtem pa tudi objekt »dinamično« inicializirajo. Konstruktorji ne morejo biti podedovani niti virtualni, vendar so lahko preobremenjeni. Ne morejo jih napotiti na njihov naslov.

Vrste konstruktorjev

V osnovi obstajajo tri vrste konstruktorjev - privzeti, parametrizirani in konstruktorji kopiranja.


  • Privzeti konstruktor: Gre za konstruktor, kjer konstruktorju ni dana nobena trditev. Privzeti konstruktor nima parametra, vendar se vrednosti privzetega konstruktorja lahko privzeto prenesejo (dinamično).
  • Parametrizirani konstruktor: Ta vrsta konstruktorja sprejme argumente; članom podatkov lahko kot argumente posredujemo različne vrednosti.
  • Konstruktor kopiranja: Konstruktor kopiranja se razlikuje od drugih vrst konstruktorjev, ker sprejema naslov drugega predmeta kot argument.

Izvedba konstruktorja:

razred Const {int a, b; javno: Const () // konstruktor brez parametra {a = 0; b = 0; } Const (int c, int d) {// konstruktor s parametrom a = c; c = d; }}; int main () {Const C1; C2 (10,20); // ta izjava prikliče konstruktorja}

Ko je C1 ustvarjen, se konstruktor brez parametra ne izvrši, saj C1 ne prenese nobenega parametra. Ko se ustvari C2, se konstruktor s parametrom izvrši, saj konstruktorju prenese dve celi številki.

Opredelitev Destruktorja:

A Destruktor je tudi članska funkcija razreda, ki obravnava pomnilnik, dodeljen predmetu. Opredeljen je z istim imenom kot razred, pred katerim je a tilde (~) simbol. Destruktorji se vedno pokličejo v obratnem vrstnem redu konstruktorjev.

V razredu je vedno en sam destruktor, saj ne sprejema nobenih argumentov. Lokalni predmeti se uničijo takoj, ko nadzor nad izvedbo zapusti blok; po drugi strani pa se globalni predmeti uničijo, ko se celoten program preneha. Prevajalnik implicitno pokliče destruktorja. Če so razredi podedovani in razred izhaja iz nadrejenega razreda in imata tako otroški razred kot nadrejeni razred destruktorje; Nato se najprej pokliče destruktor izpeljanega razreda, za njim pa destruktor nadrejenega razreda.

Izvedba Destruktorja:

razred Const {int a, b; javni: Const (int c, int d) // konstruktor s parametrom. {a = c; c = d; cout << "vrednosti a in b sta" <<>

Ko je ustvarjen objekt C1, se prikliče konstruktor z dvema parametroma celega tipa in član "a, b" se inicializira in vrednosti "a, b" se uredijo. Po tem se prikliče destruktor in "objekt C1 se uniči".

Potreba uničevalca

Izdelava konstruktorja porabi nekaj prostora v pomnilniku, saj na koncu dodeli spomin predmetom. Ta dodeljeni pomnilnik mora biti lociran pred uničenjem predmetov, da se sprostijo viri za druge naloge. Destruktorji so izredno uporabni za predvideni namen, ki učinkovito uničuje predmete in izvaja naloge čiščenja za sproščanje spomina.

  1. Glavni namen konstruktorja je dodeliti pomnilnik predmetom, ko so ustvarjeni. Nasprotno je glavni namen uničevalca, da locira spomin na predmet, ko je uničen.
  2. Konstruktor lahko sprejme argumente, saj lahko argumente uporabite za inicializacijo podatkovnih članov razreda. Po drugi strani pa destruktor ne sprejema nobenih argumentov, saj je edino njegovo delo razmestitev spomina predmeta.
  3. Konstruktor se imenuje, ko se ustvari objekt. V nasprotju s tem se pokliče destruktor, ko program preneha ali program zapusti blok, v katerem je ustvarjen predmet.
  4. Konstruktor se običajno uporablja za inicializacijo podatkovnih članov razreda, medtem ko se destruktor uporablja, da predmet izvede nekaj dejanja, preden ga uniči.
  5. Konstruktorji se izvajajo v zaporednem zaporedju, kar pomeni, če obstaja izpeljani razred, ki podeduje osnovni razred in se ustvari objekt izpeljanega razreda, potem najprej pokliče konstruktor osnovnega razreda in nato konstruktor izpeljanega razreda. Nasprotno, najprej se imenuje destruktor izpeljanega razreda in nato osnovni razred, kar pomeni, da se destruktor izvaja v obratnem vrstnem redu konstruktorja.
  6. V razredu je lahko več konstruktorjev, ki jih prepoznamo po številu prenesenih argumentov, medtem ko ima lahko le enega destruktorja.
  7. Obstaja koncept konstruktorja kopij, ki omogoča, da se objekt inicializira iz drugega predmeta, medtem ko destruktor nima takšnega koncepta.
  8. Konstruktorji so lahko preobremenjeni za izvajanje različnih dejanj pod imenom istega konstruktorja. Nasprotno, destruktorjev ni mogoče preobremeniti.

Zaključek:

Poleg podobnosti, da sta konstruktor in destruktor posebna funkcija člana razreda in imata isto ime, je bistvena razlika med obema v tem, da se "konstruktor" pokliče v času dodelitve pomnilnika in "destruktor" se pokliče v čas premestitve pomnilnika predmetov. Prevajalnik implicitno pokliče konstruktor in destruktor, čeprav nista definirana v razredu.