
Srovnejme některé základní rozdíly mezi konstruktorem a destruktorem pomocí srovnávací tabulky
Tabulka porovnání:
Základ pro srovnání | Konstruktor | Destruktor |
---|---|---|
Účel | Přidělí paměť objektu. | Uvolňuje paměť objektu. |
Prohlášení | class_name (argumenty pokud existují) {}; | ~ class_name (bez argumentů) {}; |
Argumenty | Constructor akceptuje argument | Destructor 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 číslech | Ve třídě může být více konstruktorů. | Ve třídě je však vždy jeden destruktor. |
Kopírovat konstruktor | Konstruktor 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
- 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í.
- 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.
- 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.
- 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.
- 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.
- 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.
- Existuje koncept konstruktoru kopií, který umožňuje, aby se objekt inicializoval z jiného objektu, zatímco destruktor nemá takový koncept.
- 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ě.