Ajánlott, 2024

Szerkesztő Választása

Különbség a konstruktor és a romboló között

Néha szükség van egy objektum bizonyos részének inicializálására, mielőtt felhasználható lenne. Például a veremen dolgozunk, mielőtt bármilyen műveletet elvégeznénk, a verem tetejét mindig nullára kell állítani. Ez az automatikus inicializálás jellemzője a 'Konstruktor'. Valószínűleg, ha egy objektumnak valamilyen kódot kell végrehajtania, mielőtt megsemmisítené. Például, ha egy tárgynak bezárnia kell egy megnyitott fájlt. A „Destructor” segítségével végezhető el.

Tekintsük át a konstruktor és a destruktor közötti különbségeket az összehasonlító táblázat segítségével

Összehasonlító táblázat:

Az összehasonlítás alapjaKonstruktőrPusztító
Célja
Elosztja a memóriát egy objektumhoz.Elosztja az objektum memóriáját.
Nyilatkozatclass_name (argumentumok, ha vannak) {};~ class_name (nincs argumentum) {};
érvekA Constructor elfogadja az érvetA Destructor nem fogad el semmilyen érvet.
HívásA konstruktort az objektum létrehozásakor automatikusan hívják.A rombolót automatikusan hívják, mivel a blokk kilép vagy a program befejeződik.
DolgozóA Konstruktor lehetővé teszi, hogy az objektum egy bizonyos értéket inicializáljon, mielőtt használná.A Destructor lehetővé teszi, hogy az objektum megsemmisítéskor végrehajtson egy kódot.
Végrehajtási sorrend
A konstruktort egymást követő sorrendben hívják.
A destruktort a konstruktor fordított sorrendjében hívják.
SzámokbanAz osztályban több kivitelező is lehet.De az osztályban mindig van egyetlen romboló.
MásolószerkezetA másolás-konstruktor lehetővé teszi, hogy a kivitelező egy objektumot egy másik objektumról deklaráljon és inicializáljon.Nincs ilyen fogalom.
TúlterhelésA konstruktorok túlterhelhetők.A destruktort nem lehet túlterhelni.

Konstruktor meghatározása:

A konstruktor alapvetően az osztály tagfüggvénye, amely inicializálja az objektumot és hozzárendeli a memóriát. A konstruktorok könnyen azonosíthatók, mivel azokat az osztály azonos nevével azonosították. A kivitelezőnek nincs visszatérési típusa; így nem térnek vissza semmit, nem is „semmisnek”. A Constructor mindig egy osztály nyilvános részében van meghatározva.

Egy osztályban több konstruktor is lehet; megkülönböztethetők az elfogadott érvek számától és típusától függően. Ha egy osztályban több konstruktor van; az implicit konstruktort (do-nothing konstruktort) meg kell határozni velük együtt; nem tesz semmit, csak kielégíti a fordítót.

A konstruktorokat az alapértelmezett argumentumok is meghatározhatják. Míg a „dinamikusan” is inicializálják az objektumot. A konstruktorok sem örökölhetők, sem virtuálisak, de túlterhelhetők. Nem hivatkozhatnak a címükre.

A kivitelező megvalósítása:

 Const osztály {int a, b; nyilvános: Const () {// konstruktor, paraméter nélkül a = 0; b = 0; } Const (int c, int d) {// konstruktor az a = c paraméterrel; c = d; }}; int main () {Const C1; C2 (10, 20); // ez a nyilatkozat felhívja a konstruktort} 

Ha C1-t hoz létre, akkor a konstruktor nem lesz végrehajtva, mivel a C1 nem adja át a paramétereket. Míg, amikor a C2-t létrehoztuk, akkor a konstruktorral végrehajtjuk a paramétert, mivel két egész számot ad át a konstruktornak.

A Destructor meghatározása:

A Destructor szintén egy osztály tagfüggvénye, amely az objektumhoz rendelt memóriát osztja el. Ugyanazzal a névvel van meghatározva, mint egy osztályé, amelyet egy tilde (~) szimbólum követ. A rombolókat mindig a konstruktorok fordított sorrendjében hívják.

Egy osztályban mindig van egyetlen destruktor, mivel nem fogad el semmilyen érvet. A helyi objektumok megsemmisülnek, amint a végrehajtás ellenőrzése letiltja a blokkot; másrészt a globális objektumok megsemmisülnek, amikor a teljes program véget ér. A destruktort implicit módon egy fordító hívja. Ha az osztályok öröklődnek, és egy osztály a szülő osztályból származik, és mind a gyermekosztály, mind a szülőosztály destruktorokkal rendelkezik; ekkor először a származtatott osztály pusztítóját hívják, ezt követi a szülő osztály destruktora.

A Destructor megvalósítása:

 Const osztály {int a, b; nyilvános: Const (int c, int d) {// konstruktor paraméterrel. a = c; c = d; cout << "a és b értéke" < 

Amikor C1 objektumot hozunk létre, akkor egy egész típusú típusú paraméterrel rendelkező konstruktort hívnak meg, és az „a, b” tag inicializálva lesz, ha az „a, b” értéket kinyomtatja. Ezt követően a destruktor meghívást kap, és kinyomtatja az „objektum C1 megsemmisült” üzenetet.

A konstruktorok és a rombolók közötti különbség

  1. A kivitelező fő célja, hogy a memóriát a létrehozott objektumokhoz hozzárendelje, míg a destruktor fő célja az objektum memóriájának megsemmisítéskor történő elosztása.
  2. A konstruktor elfogadhatja az érveket, mivel az argumentumok felhasználhatók az osztály adatainak inicializálására. A destruktor nem fogad el semmilyen érvet, mivel az egyetlen munkája az objektum memóriájának elosztása.
  3. Egy objektum létrehozásakor egy konstruktort hívnak. Másrészről, egy destruktort hívnak, amikor egy program befejeződik, vagy a program kilép a blokkból, amelyben az objektum jön létre.
  4. A konstruktort általában az osztály adattagjainak inicializálására használják, míg egy destruktort használnak annak érdekében, hogy az objektum bizonyos műveleteket hajtson végre, mielőtt megsemmisítené.
  5. A konstruktorokat az egymást követő sorrendben hajtják végre, ami azt jelenti, hogy létezik olyan származtatott osztály, amely örökli az alaposztályt, és a származtatott osztály objektuma jön létre, majd először az alaposztály konstruktorát, majd a származtatott osztály építőjét hívja. Másrészt a származtatott osztály rombolója az első, majd az alaposztály azt jelenti, hogy a destruktort a konstruktor fordított sorrendjében hajtják végre.
  6. Az osztályban több konstruktor is létezhet, amelyeket a megadott számú argumentum azonosít. Az osztályban csak egy destruktor van.
  7. Van egy másolat-konstruktor fogalma, amely lehetővé teszi az objektum egy másik objektum inicializálását, míg a destruktornak nincs ilyen fogalma.
  8. A konstruktorok túlterheltek lehetnek, hogy ugyanazzal a konstruktorral különböző műveleteket hajtsanak végre, míg a destruktorokat nem lehet túlterhelni.

Következtetés:

A hasonlóság mellett, hogy a konstruktor és a destruktor egy osztály különleges tagfunkciója, és ugyanaz a neve van, az alap különbség mindkettőjük között az, hogy a „konstruktor” a memóriaelosztás idején hívható meg, a „destruktor” pedig a az objektumok tárolási ideje. Mind a konstruktort, mind a destruktort implicit módon a fordító hívja meg, még akkor is, ha az osztályban nincs meghatározva.

Top