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 porovnanie | staviteľ | ničiteľ |
---|---|---|
účel | Priradí pamäť objektu. | Oddeľuje pamäť objektu. |
vyhlásenie | class_name (prípadné argumenty) {}; | ~ class_name (žiadne argumenty) {}; |
argumenty | Konštruktor akceptuje argument | Destructor neprijíma žiadny argument. |
povolania | Constructor 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 číslach | V triede môže byť viacero konštruktorov. | V triede je však vždy jediný deštruktor. |
Konštruktor kopírovania | Konštruktor kopírovania umožňuje konštruktorovi deklarovať a inicializovať objekt z iného objektu. | Žiadny takýto koncept. |
Prebieha načítanie | Konš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
- 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á.
- 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.
- 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ý.
- 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ý.
- 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.
- V triede môže byť viacero konštruktorov, ktoré sú identifikované početnými argumentmi. V triede existuje iba jeden deštruktor.
- Existuje koncepcia kopírovacieho konštruktora, ktorá umožňuje objektu inicializovať z iného objektu, zatiaľ čo deštruktor nemá takú koncepciu.
- 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.