Rozdíl mezi konstruktorem a ničitelem

Autor: Laura McKinney
Datum Vytvoření: 1 Duben 2021
Datum Aktualizace: 1 Smět 2024
Anonim
Rozdíl mezi konstruktorem a ničitelem - Technologie
Rozdíl mezi konstruktorem a ničitelem - Technologie

Obsah


Konstruktor a destruktor jsou členské funkce se stejným názvem jako jejich třída. První typ konstruktér pomáhá při inicializaci objektu. A naopak, destruktor se liší od konstruktoru, který odstraní vytvořeného konstruktoru, když je k ničemu.

Někdy je nutné inicializovat nějakou část objektu, než bude moci být využit. Například pracujeme na zásobníku, předtím než provedeme jakoukoli akci, horní část zásobníku musí být vždy nastavena na nulu. Tato funkce automatické inicializace se provádí pomocí „Konstruktoru“. Například, pokud objekt potřebuje provést nějaký kód, než je zničen. Například pokud objekt potřebuje zavřít soubor, který otevřel, před jeho zničením. Lze to provést pomocí „Destructor“.

Podívejme se na některé základní rozdíly mezi konstruktorem a destruktorem pomocí srovnávací tabulky


  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Závěr

Srovnávací tabulka:

Základ pro srovnáníKonstruktorDestruktor
Účel

Přiděluje paměť objektu.Rozdává paměť objektu.
Prohlášení class_name (argumenty, pokud existují) {};~ class_name (bez argumentů) {};
Argumenty Konstruktor přijímá argumenty Destruktor nepřijímá žádný argument.
PovoláníKonstruktor je volán automaticky, zatímco je objekt vytvořen.Destruktor se volá automaticky, jakmile je blok ukončen nebo program skončí.
PracovníKonstruktor umožňuje objektu inicializovat část jeho hodnoty dříve, než se použije.Destruktor umožňuje objektu provést nějaký kód v době jeho zničení.
Pořadí provedení

Konstruktor se nazývá postupně.
Destruktor se nazývá v obráceném pořadí konstruktoru.
V číslech Ve třídě může být více konstruktérů.Ve třídě je vždy jeden destruktor.
Kopírovat konstruktor Kopírovací konstruktor umožňuje konstruktoru deklarovat a inicializovat objekt z jiného objektu.Žádný takový koncept.
Přes načítání Konstruktory mohou být přetíženy.Destruktor nemůže být přetížen.


Definice konstruktoru:

A konstruktér je v podstatě členská funkce třídy, která inicializuje objekt a přiděluje mu paměť. Konstruktory lze snadno identifikovat, protože jsou deklarovány a definovány se stejným názvem jako název třídy. Konstruktor nemá žádný návratový typ; takže nic nevracejí, dokonce ani „neplatné“. Konstruktor je vždy definován ve veřejné části třídy.

Ve třídě může být více konstruktérů; lze je rozlišovat na základě počtu a typu předaných argumentů. Pokud existuje více konstruktérů ve třídě; implicitní konstruktor (konstruktér nedělat nic) musí být definován společně s nimi; nedělá nic jiného než, uspokojí překladač.

Konstruktory lze také definovat pomocí výchozích argumentů. Vzhledem k tomu také inicializují objekt „dynamicky“. Konstruktory nemohou být zděděni ani to může být virtuální, ale mohou být přetíženi. Nelze je odkázat na jejich adresu.

Druhy konstruktorů

V zásadě existují tři typy konstruktérů - výchozí, parametrizované a kopírovací konstruktory.

  • Výchozí konstruktor: Je to konstruktor, kde se konstruktoru nepředkládají žádné argumenty. Výchozí konstruktor nemá žádný parametr, ale hodnoty výchozímu konstruktoru lze ve výchozím nastavení předávat (dynamicky).
  • Parametrizovaný konstruktor: Tento typ konstruktéra vezme argumenty; můžeme předat členům dat různé hodnoty jako argumenty.
  • Kopírovat konstruktor: Kopírovat konstruktor se liší od jiných typů konstruktorů, protože jako argument přijímá adresu jiného objektu.

Realizace konstruktéra:

třída Const {int a, b; public: Const () // konstruktor bez parametru {a = 0; b = 0; } Const (int c, int d) {// konstruktor s parametrem a = c; c = d; }}; int main () {Const C1; C2 (10,20); // toto prohlášení vyvolává konstruktor}

Když je vytvořen C1, konstruktor bez parametru bude proveden, protože C1 nepředává žádný parametr. Vzhledem k tomu, že když je vytvořen C2, dojde k provedení konstruktoru s parametrem, protože konstruktoru předává dvě celá čísla.

Definice ničitele:

A Destruktor je také členská funkce třídy, která přidělí paměť přidělenou objektu. Je definován se stejným názvem jako třída, před kterým je a vlnovka (~) symbol. Destruktory se vždy nazývají v obráceném pořadí konstruktérů.

Ve třídě je vždy jeden destruktor, protože nepřijímá žádné argumenty. Lokální objekty jsou zničeny, jakmile kontrola provádění zruší blok; na druhé straně jsou globální objekty zničeny po ukončení celého programu. Destruktor je implicitně nazýván kompilátorem. Pokud jsou třídy zděděny a třída je odvozena z nadřazené třídy a podřízená třída i nadřazená třída mají destruktory; potom se destruktor odvozené třídy nazývá první, následovaný destruktorem nadřazené třídy.

Implementace Destructor:

třída Const {int a, b; public: Const (int c, int d) // konstruktor s parametrem. {a = c; c = d; cout << "hodnota aab jsou" <<>

Při vytvoření objektu C1 se vyvolá konstruktor se dvěma parametry typu integer a člen „a, b“ se inicializuje a upraví se hodnota „a, b“. Poté, co je destruktor vyvolán a je „zničen objekt C1“.

Potřeba ničitele

Vytvoření konstruktoru spotřebovává určité množství paměťového prostoru, protože nakonec přiděluje paměť objektům. Tato přidělená paměť musí být uvolněna před zničením objektů, aby se uvolnily zdroje pro jiné úkoly. Destruktory jsou velmi užitečné pro zamýšlený účel, který účinně ničí objekty a provádí čisticí úkoly pro uvolnění paměti.

  1. Primárním účelem konstruktoru je přidělit paměť objektům, když jsou vytvořeny. Na rozdíl od toho je hlavním cílem destruktoru přidělovat paměť objektu, když je zničen.
  2. Konstruktor smí přijmout argumenty, protože argumenty lze použít k inicializaci datových členů třídy. Na druhou stranu destruktor nepřijímá žádné argumenty, protože jeho jedinou prací je přidělování paměti objektu.
  3. Konstruktor je volán při vytváření objektu. Naproti tomu destruktor je volán při ukončení programu nebo ukončení programu z bloku, ve kterém je objekt vytvořen.
  4. Konstruktor se obvykle používá k inicializaci datových členů třídy, zatímco destruktor se používá k tomu, aby objekt provedl nějakou akci před zničením.
  5. Konstruktory jsou prováděny v pořadí, které znamená, že pokud existuje odvozená třída, která zdědí základní třídu a vytvoří se objekt odvozené třídy, bude nejprve volat konstruktor základní třídy a poté konstruktor odvozené třídy. Naopak deštruktor odvozené třídy se nazývá první a poté základní třída, což znamená, že deštruktor se provádí v obráceném pořadí konstruktoru.
  6. Ve třídě může být více konstruktorů, které jsou identifikovány předanými argumenty číslo, zatímco může mít pouze jeden destruktor.
  7. Existuje koncept konstruktoru kopií, který umožňuje inicializaci objektu z jiného objektu, zatímco destruktor takový koncept nemá.
  8. Konstruktory mohou být přetíženy a provádět různé akce pod názvem stejného konstruktéra. Naopak destruktory nemohou být přetíženy.

Závěr:

Kromě podobnosti, že konstruktor a destruktor jsou speciální členskou funkcí třídy a mají stejné jméno, podstatný rozdíl mezi nimi je „konstruktor“ je volán v okamžiku přidělení paměti a „destruktor“ je volán na čas přidělování paměti objektů. Konstruktor i destruktor jsou implicitně volány kompilátorem, i když nejsou definovány ve třídě.