Rozdiel medzi konštruktorom a ničiteľom

Autor: Laura McKinney
Dátum Stvorenia: 1 Apríl 2021
Dátum Aktualizácie: 11 Smieť 2024
Anonim
Destructors in C++
Video: Destructors in C++

Obsah


Konštruktor a deštruktor sú členské funkcie s rovnakým názvom ako ich trieda. Prvý typ staviteľ pomáha pri inicializácii objektu. Naopak, a ničiteľ sa líši od konštruktora, ktorý odstráni vytvoreného konštruktora, keď sa nepoužíva.

Niekedy je potrebné inicializovať niektorú časť objektu skôr, ako sa dá použiť. Napríklad pracujeme na zásobníku, predtým ako začneme s akoukoľvek činnosťou, horná časť zásobníka musí byť vždy nastavená na nulu. Táto funkcia automatickej inicializácie sa vykonáva pomocou aplikácie „Constructor“. Napríklad, ak objekt potrebuje vykonať nejaký kód pred zničením. Napríklad, ak objekt potrebuje zatvoriť súbor, ktorý otvoril, pred jeho zničením. Môže sa to vykonať pomocou „Destructor“.

Pozrime sa na niektoré základné rozdiely medzi konštruktorom a deštruktorom pomocou porovnávacej tabuľky


  1. Porovnávacia tabuľka
  2. definícia
  3. Kľúčové rozdiely
  4. záver

Porovnávacia tabuľka:

Základ pre porovnaniestaviteľničiteľ
účel

Priradí pamäť k objektu.Rozdeľuje pamäť objektu.
vyhlásenie class_name (ak existujú) {};~ class_name (bez argumentov) {};
argumenty Konštruktor prijíma argumenty Destruktor neakceptuje žiadne argumenty.
povolaniaPočas vytvárania objektu sa konštruktor volá automaticky.Destruktor sa volá automaticky, keď je blok ukončený alebo program končí.
pracovnéKonštruktor umožňuje objektu inicializovať časť jeho hodnoty skôr, ako sa použije.Destruktor umožňuje objektu vykonať nejaký kód v čase jeho zničenia.
Príkaz na vykonanie

Konštruktor sa volá postupne.
Destruktor sa nazýva v obrátenom poradí konštruktora.
V číslach V triede môže byť viac konštruktorov.V triede je vždy jeden deštruktor.
Kopírovanie Constructor Konštruktor kopírovania umožňuje konštruktorovi deklarovať a inicializovať objekt z iného objektu.Takýto koncept neexistuje.
Prebieha načítavanie Konštruktory môžu byť preťažené.Ničiteľ nemôže byť preťažený.


Definícia konštruktora:

staviteľ je v podstate členská funkcia triedy, ktorá inicializuje objekt a priraďuje mu pamäť. Konštruktory sa dajú ľahko identifikovať, pretože sú deklarované a definované pod rovnakým názvom ako názov triedy. Konštruktor nemá žiadny návratový typ; takže nevracajú nič, dokonca ani „neplatné“. Konštruktor je vždy definovaný vo verejnej časti triedy.

V triede môže byť viac konštruktorov; možno ich rozlíšiť na základe počtu a typu predložených argumentov. Ak existuje viac konštruktorov v triede; implicitný konštruktor (konštruktér nedokončenia) musí byť definovaný spolu s nimi; nerobí nič iné ako, uspokojuje kompilátor.

Konštruktory môžu byť tiež definované pomocou predvolených argumentov. Zatiaľ čo iniciujú objekt „dynamicky“. Konštruktory nemôžu byť zdedené, ani to nemôže byť virtuálne, ale môžu byť preťažené. Nemôžu byť uvedení na svoju adresu.

Druhy konštruktorov

V zásade existujú tri typy konštruktorov - predvolené, parametrizované a kopírovacie konštruktory.

  • Predvolený konštruktor: Je to konštruktér, ktorý sa s ním neprihlasuje. Predvolený konštruktor nemá žiadny parameter, ale hodnoty pre predvoleného konštruktora možno predvolene (dynamicky) odovzdať.
  • Parameterizovaný konštruktor: Tento typ konštruktora berie argumenty; ako argumenty môžeme členom údajov odovzdať rôzne hodnoty.
  • Kopírovanie Constructor: Konštruktor kopírovania sa líši od ostatných typov konštruktorov, pretože ako argument akceptuje adresu druhého objektu.

Realizácia staviteľa:

trieda Const {int a, b; public: Const () // konstruktor bez parametra {a = 0; b = 0; } Const (int c, int d) {// konštruktor s parametrom a = c; c = d; }}; int main () {Const C1; C2 (10,20); // toto vyhlásenie vyvoláva konštruktora}

Pri vytvorení C1 sa vykoná konštruktor bez parametra, pretože C1 neprechádza žiadny parameter. Zatiaľ čo pri vytvorení C2 sa spustí konštruktor s parametrom, pretože do konštruktora odovzdáva dve celé čísla.

Definícia ničiteľa:

ničiteľ je tiež členskou funkciou triedy, ktorá prideľuje pamäť vyhradenú pre objekt. Je definovaný s rovnakým názvom ako názov triedy, ktorému predchádza a vlnovka (~) symbol. Destruktory sa vždy nazývajú v obrátenom poradí konštruktorov.

V triede vždy existuje jeden deštruktor, pretože neprijíma žiadne argumenty. Miestne objekty sa zničia, len čo kontrola vykonania zruší blok; na druhej strane, globálne objekty sa zničia, keď sa ukončí celý program. Deštruktor je implicitne nazývaný kompilátorom. Ak sú triedy zdedené a trieda je odvodená z nadradenej triedy, tak podradená trieda, ako aj nadradená trieda majú deštruktory; potom sa deštruktor odvodenej triedy nazýva prvý a potom deštruktor rodičovskej triedy.

Implementácia Destructor:

trieda Const {int a, b; public: Const (int c, int d) // konštruktor s parametrom. {a = c; c = d; cout << "hodnota aab sú" <<>

Pri vytvorení objektu C1 sa vyvolá konštruktor s dvoma parametrami celočíselného typu a inicializuje sa člen „a, b“ a upraví sa hodnota „a, b“. Potom sa vyvolá deštruktor a je zničený „objekt C1“.

Potreba ničiteľa

Vytvorenie konštruktora spotrebúva určité množstvo pamäťového priestoru, pretože nakoniec objektom prideľuje pamäť. Táto alokovaná pamäť musí byť uvoľnená pred zničením objektov, aby sa uvoľnili zdroje pre ďalšie úlohy. Destruktory sú veľmi užitočné na zamýšľaný účel, ktorý účinne ničí objekty a vykonáva čistiace úlohy na uvoľnenie pamäte.

  1. Primárnym účelom konštruktora je pridelenie pamäte k objektom, keď sú vytvorené. Naopak, hlavným cieľom deštruktora je prerozdeliť pamäť objektu, keď je zničený.
  2. Konštruktor môže argumenty akceptovať, pretože argumenty sa môžu použiť na inicializáciu dátových členov triedy. Na druhej strane deštruktor neakceptuje žiadne argumenty, pretože jeho jedinou prácou je prerozdelenie pamäte objektu.
  3. Konštruktor sa volá pri vytvorení objektu. Naopak, deštruktor sa volá, keď je program ukončený alebo keď program opustí blok, v ktorom je objekt vytvorený.
  4. Konštruktor sa zvyčajne používa na inicializáciu dátových členov triedy, zatiaľ čo deštruktor sa používa na to, aby nechal objekt vykonať nejakú akciu pred zničením.
  5. Konštruktory sa vykonávajú v postupnom poradí, to znamená, že ak existuje odvodená trieda, ktorá zdedí základnú triedu a vytvorí sa objekt odvodenej triedy, potom najskôr zavolá konštruktor základnej triedy a potom konštruktor odvodenej triedy. Naopak deštruktor odvodenej triedy sa nazýva prvý a potom základná trieda, čo znamená, že deštruktor sa vykoná v opačnom poradí ako konštruktor.
  6. V triede môže byť viac konštruktorov, ktoré sú identifikované počtom argumentov odovzdaných, zatiaľ čo môže mať iba jeden deštruktor.
  7. Existuje koncept konštruktora kópií, ktorý umožňuje inicializácii objektu z iného objektu, zatiaľ čo ničiteľ nemá takýto koncept.
  8. Konštruktory môžu byť preťažené a vykonávať rôzne akcie pod menom toho istého konštruktéra. Naopak, deštruktory sa nemôžu preťažiť.

záver:

Okrem podobnosti, že konštruktor a deštruktor sú špeciálnou členskou funkciou triedy a majú rovnaké meno, podstatný rozdiel medzi nimi je „konštruktor“ sa volá v čase pridelenia pamäte a „destruktor“ sa nazýva v čas pridelenia pamäte objektov. Konštruktor aj deštruktor sú implicitne nazývané kompilátorom, aj keď nie sú definované v triede.