Ero rakentajan ja tuhoajan välillä

Kirjoittaja: Laura McKinney
Luomispäivä: 1 Huhtikuu 2021
Päivityspäivä: 9 Saattaa 2024
Anonim
Ero rakentajan ja tuhoajan välillä - Tekniikka
Ero rakentajan ja tuhoajan välillä - Tekniikka

Sisältö


Rakentaja ja tuhoaja ovat jäsentoimintoja samalla nimellä kuin luokka. Entinen tyyppi rakentaja auttaa objektin alustamisessa. Päinvastoin, a destructor on erilainen kuin rakentaja, joka poistaa luodun rakentajan, kun siitä ei ole hyötyä.

Joskus objektin jokin osa on alustettava, ennen kuin sitä voidaan käyttää. Esimerkiksi, toimimme pinossa, ennen kuin suoritamme mitään toimia, pino yläosa on aina asetettava nollaan. Tämä automaattisen alustuksen ominaisuus suoritetaan 'Constructor': n kautta. Kuten, jos objektin on suoritettava jokin koodi ennen sen tuhoamista. Esimerkiksi, jos esineen on suljettava avaamansa tiedosto ennen tuhoamista. Se voidaan suorittaa 'Hävittäjän' avulla.

Tarkastellaan vertailukaavion avulla joitain rakentajan ja tuhoajan välisiä peruseroja

  1. Vertailutaulukko
  2. Määritelmä
  3. Keskeiset erot
  4. johtopäätös

Vertailutaulukko:

Vertailun perusteetRakentajadestructor
Tarkoitus

Se allokoi muistin objektiin.Se käsittelee kohteen muistin.
ilmoitus luokan_nimi (mahdolliset argumentit) {};~ luokan_nimi (ei argumentteja) {};
argumentit Rakentaja hyväksyy väitteen Tuhoaja ei hyväksy mitään väitteitä.
KutsumusRakentaja kutsutaan automaattisesti, kun objekti luodaan.Tuhoaja kutsutaan automaattisesti, kun lohko poistuu tai ohjelma päättyy.
TyöskentelyKonstruktorin avulla esine voi alustaa osan arvostaan ​​aiemmin, sitä käytetään.Hävittäjä sallii objektin suorittaa jonkin koodin tuhoamisen yhteydessä.
Suoritusjärjestys

Konstruktoreita kutsutaan peräkkäisessä järjestyksessä.
Tuhoajia kutsutaan konstruktorin käänteisessä järjestyksessä.
Numeroina Luokassa voi olla useita rakentajia.Luokassa on aina yksi tuhoaja.
Kopiorakentaja Kopiointirakentajan avulla rakentaja voi ilmoittaa ja alustaa objektin toisesta objektista.Ei sellaista konseptia.
Ylikuormitus Rakentajat voivat olla ylikuormitetut.Tuhoajaa ei voi ylikuormittaa.


Määritelmä Constructor:

rakentaja on pohjimmiltaan luokan jäsenfunktio, joka alustaa objektin ja varaa sille muistin. Rakentajat voidaan helposti tunnistaa, koska ne on ilmoitettu ja määritelty samalla nimellä kuin luokan. Rakentajalla ei ole paluutapaa; joten he eivät palauta mitään, edes tyhjää. Rakentaja määritellään aina luokan julkisessa osassa.

Luokassa voi olla useita rakentajia; ne voidaan erottaa perusteltujen määrien ja tyyppien perusteella. Jos luokassa on useita rakentajia; epäsuora rakentaja (tee mitään tekemättä) on määriteltävä yhdessä heidän kanssaan; Se ei tee muuta kuin tyydyttää kääntäjän.

Rakentajat voidaan määritellä myös oletusargumenteilla. Ne myös alustavat objektin ”dynaamisesti”. Rakentajia ei voi periä eikä se voi olla virtuaalinen, mutta ne voivat olla ylikuormitetut. Heitä ei voida osoittaa osoitteeseen.


Rakennustyypit

Periaatteessa on kolme tyyppiä rakentajia - oletus-, parametrointi- ja kopiointirakentajat.

  • Oletusrakentaja: Se on rakentaja, jota ei argumentoida rakentajalle. Oletusrakentajalla ei ole parametria, mutta arvot oletuskonstruktorille voidaan välittää oletusarvoisesti (dynaamisesti).
  • Parametrisoitu rakentaja: Tämäntyyppinen rakentaja ottaa argumentit; voimme siirtää erilaisia ​​arvoja datajäsenille argumentteina.
  • Kopiorakentaja: Kopiointirakentaja eroaa muun tyyppisistä rakentajista, koska se hyväksyy argumenttina toisen objektin osoitteen.

Suunnittelijan toteutus:

luokka Const {int a, b; public: Const () // rakentaja ilman parametria {a = 0; b = 0; } Const (int c, int d) {// rakentaja parametrilla a = c; c = d; }}; int main () {Const C1; C2 (10,20); // tämä lausunto kutsuu rakentajaa}

Kun C1 luodaan, rakentaja, jolla ei ole parametria, suoritetaan, koska C1 ei lähetä mitään parametria. Kun taas C2 luotaessa parametrilla varustettu konstruktori suoritetaan, koska se kuljettaa kaksi kokonaislukua konstruktorille.

Määritelmä Tuhoaja:

destructor on myös luokan jäsenfunktio, joka jakaa kohteelle varatun muistin. Se on määritelty samalla nimellä kuin luokan nimi, jota edeltää a aaltoviiva (~) symboli. Destruktoreita kutsutaan aina rakentajien käänteisessä järjestyksessä.

Luokassa on aina yksi tuhoaja, koska se ei hyväksy mitään argumentteja. Paikalliset esineet tuhotaan heti, kun toteutuksen hallinta johtaa lohkon; toisaalta globaalit objektit tuhoutuvat, kun koko ohjelma päättyy. Kääntäjä kutsuu epäsuorasti tuhoajaan. Jos luokat ovat perittyjä ja luokka on johdettu vanhemmuusluokasta, ja sekä lastenluokalla että vanhemmaluokalla on tuhoajia; sitten johdetun luokan tuhoajaa kutsutaan ensin, jota seuraa vanhemman luokan tuhoaja.

Hävittäjän toteutus:

luokka Const {int a, b; public: Const (int c, int d) // rakentaja parametrilla. {a = c; c = d; cout << "arvot a ja b ovat" <<>

Kun C1-objekti luodaan, rakentaja, jolla on kaksi kokonaisluvutyyppistä parametria, kutsutaan jäseneksi ”a, b” ja ”a, b” -arvo muutetaan. Sen jälkeen tuhoaja kutsutaan ja ”esine C1 hävitetään”.

Tuhoajan tarve

Konstruktorin luominen vie jonkin verran muistitilaa, koska se varaa lopulta muistin objekteihin. Tämä varattu muisti on jaettava ennen objektien tuhoamista, jotta resurssit vapautuvat muihin tehtäviin. Tuhoajat ovat erittäin hyödyllisiä tarkoitettuihin tarkoituksiin, jotka tuhoavat tehokkaasti esineitä ja suorittavat puhdistustöitä muistin vapauttamiseksi.

  1. Rakentajan päätarkoitus on allokoida muisti objekteille, kun ne luodaan. Toisin kuin tuhoaja, päätarkoitus on sijoittaa kohteen muisti, kun se tuhoutuu.
  2. Suunnittelijan sallitaan hyväksyä argumentit, koska niitä voidaan käyttää luokan datajäsenten alustamiseen. Toisaalta tuhoaja ei hyväksy mitään argumentteja, koska sen ainoa tehtävä on käsitellä kohteen muistin sijoittamista.
  3. Rakentaja kutsutaan, kun objekti luodaan. Sitä vastoin hävittäjää kutsutaan, kun ohjelma lopetetaan tai ohjelma poistuu lohkosta, johon objekti luodaan.
  4. Suunnittelijaa käytetään yleensä luokan tietojäsenten alustamiseen, kun taas hävittäjää käytetään esineen suorittamaan jonkinlainen toimenpide ennen sen tuhoamista.
  5. Rakentajat suoritetaan peräkkäisessä järjestyksessä, mikä tarkoittaa, että jos on johdettu luokka, joka perii perusluokan ja johdetun luokan objekti luodaan, se kutsuu ensin perusluokan konstruktoria ja sitten johdetun luokan konstruktoria. Päinvastoin, johdetun luokan hävittäjäksi kutsutaan ensin ja sitten perusluokka, se tarkoittaa, että hävittäjä suoritetaan rakentajan käänteisessä järjestyksessä.
  6. Luokassa voi olla useita konstruktoreita, jotka tunnistetaan läpäistetyillä lukuargumenteilla, kun taas siinä voi olla vain yksi tuhoaja.
  7. On olemassa kopiokonstruktorin käsite, jonka avulla objekti voidaan alustaa toisesta esineestä, kun taas hävittäjällä ei ole sellaista konseptia.
  8. Rakentajat voivat olla ylikuormitetut suorittamaan erilaisia ​​toimia saman rakentajan nimellä. Päinvastoin, rakentajia ei voi ylikuormittaa.

johtopäätös:

Samankaltaisuuden lisäksi, että rakentaja ja tuhoaja ovat luokan erityisiä jäsentoimintoja ja joilla on sama nimi, olennainen ero molempien välillä on, että ”rakentajaa” kutsutaan muistin allokoinnin aikana ja ”tuhoajaa” kutsutaan esineiden muistipaikan sijainti. Kääntäjä kutsuu implisiittisesti sekä rakentajaa että tuhoajaa, vaikka niitä ei ole määritelty luokassa.