Doporučená, 2021

Redakce Choice

Rozdíl mezi konstruktorem a destruktorem

Někdy je nutné inicializovat určitou část objektu dříve, než může být využita. Například pracujeme na zásobníku, než provedeme jakoukoliv akci, horní část zásobníku musí být vždy nastavena na nulu. Tato funkce automatické inicializace se provádí přes 'Constructor'. Pravděpodobně, pokud objekt potřebuje provést nějaký kód před jeho zničením. Pokud například objekt potřebuje zavřít soubor, který otevřel, před jeho zničením. To může být provedeno pomocí 'Destructor'.

Srovnejme některé základní rozdíly mezi konstruktorem a destruktorem pomocí srovnávací tabulky

Tabulka porovnání:

Základ pro srovnáníKonstruktorDestruktor
Účel
Přidělí paměť objektu.Uvolňuje paměť objektu.
Prohlášeníclass_name (argumenty pokud existují) {};~ class_name (bez argumentů) {};
ArgumentyConstructor akceptuje argumentDestructor nepřijímá žádné argumenty.
PovoláníKonstruktor je volán automaticky, když je objekt vytvořen.Destruktor je volán automaticky, protože blok je ukončen nebo program ukončen.
PracovníKonstruktor dovoluje objektu inicializovat část své hodnoty dříve, použije se.Destruktor umožňuje objektu vykonat nějaký kód v době jeho zničení.
Řád exekuce
Konstruktor je volán v následujícím pořadí.
Destruktor se nazývá v opačném pořadí konstruktoru.
V číslechVe třídě může být více konstruktorů.Ve třídě je však vždy jeden destruktor.
Kopírovat konstruktorKonstruktor Copy umožňuje konstruktoru deklarovat a inicializovat objekt z jiného objektu.Žádný takový koncept.
PřetíženíKonstruktory mohou být přetíženy.Destruktor nelze přetížit.

Definice konstruktoru:

Konstruktor 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 třída. Konstruktor nemá žádný typ návratu; tak nevracejí nic, ani „neplatné“. Konstruktor je vždy definován ve veřejné části třídy.

Ve třídě může být více konstruktorů; mohou být rozlišeny na základě počtu a typu předaných argumentů. Pokud existuje více konstruktorů ve třídě; implicitní konstruktor (konstruktor do-nothing) musí být definován spolu s nimi; nedělá nic, ale splňuje kompilátor.

Konstruktory mohou být také definovány s výchozími argumenty. Zatímco objekt také „dynamicky“ inicializuje. Konstruktory nemohou být ani zděděny, ani virtuální, ale mohou být přetíženy. Nelze je odkázat na jejich adresu.

Implementace konstruktoru:

 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); // tento příkaz vyvolá konstruktor} 

Při vytvoření C1 se provede konstruktor bez parametru, protože C1 neprochází žádným parametrem. Zatímco když je vytvořen C2, provede se konstruktor s parametrem, protože konstruktoru předává dvě celá čísla.

Definice destruktoru:

Destruktor je také členskou funkcí třídy, která uvolňuje paměť přidělenou objektu. Je definován se stejným názvem jako třída, kterému předchází symbol tilda (~). Destruktory jsou vždy volány v opačném pořadí konstruktorů.

Ve třídě je vždy jeden destruktor, protože nepřijímá žádné argumenty. Lokální objekty jsou zničeny, jakmile kontrola provedení opustí blok; na druhé straně jsou globální objekty při ukončení celého programu zničeny. Kompilátor implicitně nazývá destruktor. Pokud jsou třídy zděděny a třída je odvozena z rodičovské třídy a třída potomků i třída rodičů mají destruktory; pak je destruktor odvozené třídy volán jako 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 a a b jsou" < 

Když je vytvořen objekt C1, vyvolá se konstruktor se dvěma parametry typu celočíselného čísla a člen „a, b“ se inicializuje a hodnota „a, b“ se vytiskne. Po vyvolání destruktoru a vytištění zprávy „objekt C1 se zničí“.

Klíčový rozdíl mezi konstruktéry a destruktory

  1. Hlavním účelem konstruktoru je přidělit paměť objektům, když jsou vytvořeny, zatímco hlavním účelem destruktoru je uvolnit paměť objektu při jeho zničení.
  2. Konstruktor může přijmout argumenty, protože argumenty mohou být použity k inicializaci datových členů třídy. Destruktor nepřijímá žádné argumenty, protože jeho jedinou prací je uvolnění paměti objektu.
  3. Při vytvoření objektu se nazývá konstruktor. Na druhé straně je destruktor vyvolán, když je program ukončen nebo program ukončí blok, ve kterém je objekt vytvořen.
  4. Konstruktor se obecně používá k inicializaci datových členů třídy, zatímco destruktor se používá k tomu, aby umožnil objektu provést nějakou akci dříve, než je zničen.
  5. Konstruktory jsou prováděny v následujícím pořadí, což znamená, že pokud existuje odvozená třída, která zdědí základní třídu a objekt odvozené třídy je vytvořen, pak nejprve zavolá konstruktor základní třídy a poté konstruktor odvozené třídy. Na druhé straně je destruktor odvozené třídy volán jako první a potom základní třída znamená, že destruktor je proveden v opačném pořadí konstruktoru.
  6. Ve třídě může být více konstruktorů, které jsou identifikovány předanými argumenty čísel. Ve třídě je pouze jeden destruktor.
  7. Existuje koncept konstruktoru kopií, který umožňuje, aby se objekt inicializoval z jiného objektu, zatímco destruktor nemá takový koncept.
  8. Konstruktory mohou být přetíženy k provádění různých akcí pod názvem stejného konstruktoru, zatímco destruktory nemohou být přetíženy.

Závěr:

Kromě podobnosti, že konstruktor a destruktor jsou speciální členské funkce třídy a mají stejný název, základní rozdíl mezi oběma je, 'konstruktor' je volán v době přidělení paměti a 'destructor' je volán na čas uvolnění paměti objektů. Konstruktor i destruktor jsou implicitně volány kompilátorem, i když nejsou definovány ve třídě.

Top