Odporúčaná, 2024

Redakcia Choice

Rozdiel medzi konštruktérom a ničiteľom

Niekedy sa vyžaduje inicializácia nejakej časti objektu pred jej použitím. Napríklad, pracujeme na stohu, predtým ako vykonáme nejakú akciu, horná časť stohu musí byť vždy nastavená na nulu. Táto funkcia automatickej inicializácie sa vykonáva prostredníctvom konštruktora. Pravdepodobne, ak objekt potrebuje vykonať nejaký kód pred jeho zničením. Napríklad, ak objekt potrebuje zatvoriť súbor, ktorý otvoril pred jeho zničením. Môže sa to robiť pomocou nástroja Destructor.

Pozrime sa niekoľko základných rozdielov medzi konštruktérom a destruktorom pomocou porovnávacej tabuľky

Porovnávacia tabuľka:

Základ pre porovnaniestaviteľničiteľ
účel
Priradí pamäť objektu.Oddeľuje pamäť objektu.
vyhlásenieclass_name (prípadné argumenty) {};~ class_name (žiadne argumenty) {};
argumentyKonštruktor akceptuje argumentDestructor neprijíma žiadny argument.
povolaniaConstructor sa volá automaticky, zatiaľ čo objekt je vytvorený.Destructor sa volá automaticky, keď sa ukončí blok alebo ukončí program.
pracovnéKonštruktor umožňuje objektu inicializovať časť jeho hodnoty predtým, ako sa používa.Destruktor umožňuje objektu vykonať nejaký kód v čase jeho zničenia.
Rozkaz vykonania
Konštruktor sa volá postupne.
Destruktor sa volá v opačnom poradí od konštruktora.
V číslachV triede môže byť viacero konštruktorov.V triede je však vždy jediný deštruktor.
Konštruktor kopírovaniaKonštruktor kopírovania umožňuje konštruktorovi deklarovať a inicializovať objekt z iného objektu.Žiadny takýto koncept.
Prebieha načítanieKonštruktory môžu byť preťažené.Destruktor nie je možné preťažiť.

Definícia konštruktora:

Konštruktor je v podstate členskou funkciou triedy, ktorý inicializuje objekt a prideľuje mu pamäť. Konštruktéri možno ľahko identifikovať, pretože sú deklarované a definované rovnakým názvom ako trieda. Konštruktor nemá návratový typ; tak nevrátia nič, ani "neplatné". Konstruktor je vždy definovaný vo verejnej časti triedy.

V triede môžu byť viacerí konštruktéri. môžu sa rozlišovať na základe počtu a typu predložených argumentov. Ak je v triede viac konštruktorov; implicitný konštruktor (konštruktor nič) musí byť definovaný spolu s nimi; to nič nerobí, uspokojuje kompilátora.

Konštruktory môžu byť tiež definované s predvolenými argumentmi. Zatiaľ čo inicializujú objekt "dynamicky". Konštruktéri nemôžu byť zdedení ani nemôžu byť virtuálne, ale môžu byť preťažení. Nemožno ich odkázať na ich adresu.

Implementácia konštruktéra:

 trieda Const {int a, b; verejné: Const () {// konštruktor 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 konštatovanie vyvolá konštruktéra} 

Pri vytvorení reťazca C1 sa vykoná konštruktor bez parametrov, pretože C1 neprechádza žiadnym parametrom. Zatiaľ čo pri vytvorení C2 sa vykoná konštruktor s parametrom, pretože prechádza do konštruktora dve celá čísla.

Definícia ničiaceho:

Destruktor je tiež členskou funkciou triedy, ktorá deallokuje pamäť priradenú objektu. Definuje sa rovnakým názvom ako trieda, pred ktorým je symbol tilda (~). Destruktory sú vždy volané v opačnom poradí od konštruktérov.

V triede je vždy jediný deštruktor, pretože neakceptuje žiadne argumenty. Miestne objekty sú zničené hneď, ako kontrola vykonania zostane blokom; na druhej strane globálne objekty sú zničené po ukončení celého programu. Deštruktor implicitne volá kompilátor. Ak sú triedy dedené a trieda je odvodená od rodičovskej triedy a obe detská trieda a materská trieda majú deštruktory; potom sa najprv označí deštruktor odvodenej triedy, po ktorom nasleduje deštruktor materskej triedy.

Implementácia Destructor:

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

Pri vytvorení objektu C1 sa vyvolá konštruktor s dvoma parametrami typu celočíselný a inicializuje sa člen "a, b" nad počiatočnou hodnotou "a, b". Po tom, ako sa deštruktor dostaví a vytlačí správu "objekt C1 zničený".

Kľúčový rozdiel medzi konštruktérmi a ničiteľmi

  1. Hlavným účelom konštruktora je prideliť pamäť objektom, keď sú vytvorené, zatiaľ čo hlavným účelom destruktora je oddeliť pamäť objektu, keď je zničená.
  2. Konštruktér môže argumenty prijať, pretože argumenty môžu byť použité na inicializáciu dátových členov triedy. Deštruktor neprijíma žiadne argumenty, pretože jeho jedinou prácou je oddelenie pamäte objektu.
  3. Konštruktor sa volá pri vytvorení objektu. Na druhej strane, destruktor sa zavolá, keď je program ukončený, alebo 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 destruktor sa používa na to, aby objekt mohol vykonať nejakú činnosť predtým, ako je zničený.
  5. Konštruktory sú vykonávané v poradí, ktorý znamená, že ak existuje odvodená trieda, ktorá zdedí základnú triedu a objekt odvodenej triedy je vytvorený, potom sa bude najskôr nazývať konštruktér základnej triedy a potom konštruktér odvodenej triedy. Na druhej strane sa deštruktor odvodenej triedy nazýva najprv a potom základná trieda to znamená, že destruktor je vykonaný v opačnom poradí od konštruktora.
  6. V triede môže byť viacero konštruktorov, ktoré sú identifikované početnými argumentmi. V triede existuje iba jeden deštruktor.
  7. Existuje koncepcia kopírovacieho konštruktora, ktorá umožňuje objektu inicializovať z iného objektu, zatiaľ čo deštruktor nemá takú koncepciu.
  8. Konštruktorov môže byť preťaženie na vykonanie inej činnosti pod menom toho istého konštruktora, zatiaľ čo destruktory nie je možné preťažiť.

záver:

Okrem podobnosti, že konštruktér a deštruktor sú špeciálnou členskou funkciou triedy a majú rovnaké meno, základným rozdielom medzi obidvoma z nich je, že "konštruktor" sa nazýva v čase pridelenia pamäte a "destructor" sa nazýva na čas odloženia pamäte objektov. Obaja konštruktér a destruktor sú implicitne nazývaní kompilátorom, aj keď nie sú definované v triede.

Top