Úvod do Destructor v C ++

Jak všichni víme, C ++ je objektový programový jazyk a je široce používán v IT odvětvích pro vývoj softwaru, ovladačů, vestavěného firmwaru a aplikací klient-server. Je to jazyk střední úrovně zapouzdřující vlastnosti jazyka vysoké i nízké úrovně. Má koncept tříd a objektů. V C ++ hrají konstruktéři důležitou roli při vytváření objektu a inicializaci proměnných instance, ale co se stane s těmito objekty a prostředky poté, co již nejsou používány nebo skončí program? O tuto odpovědnost se starají Destructors v C ++. Destruktory se používají ke zničení objektů vytvořených konstruktory, pokud již nejsou potřebné k uvolnění paměti. Jsou to speciální členské funkce a jsou automaticky vyvolávány C ++. kompilátor pro uvolnění paměti, když v programu není žádný uživatel definovaný destruktor. Stejně jako konstruktory mají destruktory stejné jméno jako třída, které předchází znak vlnovky (~). Ničitel ale nepřijímá žádné argumenty / parametry a nevrací nic, tj. Nemá žádný typ návratu.

Destruktory nikdy nemohou být přetíženy jako konstruktéři ve třídě. Níže jsou uvedeny některé situace, kdy kompilátor automaticky volá destruktor:

  • Když je vyvolán operátor odstranění.
  • Po dokončení provádění programu.
  • Když blok / rozsah lokálních proměnných končí.

Programátor může definovat destruktor známý jako konstruktér navržený uživatelem. Destruktor může být deklarován jako virtuální nebo čistý virtuální, ale nemůže být deklarován jako const, volatile, const volatile nebo statický.

Jak Destructor pracuje v C ++?

Pro práci destruktoru je třeba mít na paměti níže uvedené body:

  • Destruktory objektů třídy se nazývají první před voláním destruktoru členů a základen. Destruktory nevirtuální základní třídy se nazývají před destruktory virtuální základní třídy.
  • Před základními třídami se nazývá destruktor nestatických členů. Destruktory virtuálních i nevirtuálních základních tříd se nazývají v obráceném pořadí jejich deklarace.
  • Implicitní destruktory jsou automaticky vyvolávány kompilátorem C ++, když objekt zmizí z rozsahu nebo když se provádění programu ukončí pro externí a statické objekty v programu. Destruktory se nazývají, aby zničily objekty vytvořené novým klíčovým slovem.
  • V případě implicitních i uživatelsky definovaných destruktorů kompilátor nejprve provede tělo destruktoru a poté volá destruktory všech nestatických netradičních tříd a poté zavolá destruktory nevirtuálních a virtuálních základních tříd v opačném pořadí jejich konstrukce.

Syntaxe ničitele

Destruktorům v C ++ předchází znak vlnovky (~). Níže je uvedena základní syntaxe destruktoru:

Syntax:

Class class_name()
(


public:
class_name(); // Constructor
~class_name(); // destructor
)
)

V syntaxi je 'class_name' název třídy a v hlavní metodě jsou definovány konstruktor i destruktor se stejným názvem třídy. Destruktor nemá žádné parametry ani typ návratu.

Příklady Destructor v C ++

Níže je uveden příklad Destructor v C ++:

Příklad č. 1: Program s uživatelem definovaným ničitelem

Kód:

#include
using namespace std;
class Example1( //class
public:
Example1()( // constructor cout << “Hello I am inside a constructor” << endl;
)
~Example1()( //destructor
cout << “Hello I am inside a destructor” << endl;
)
void display()
(
cout << “Hello this is a display method” << endl
)
);
int main()
(
Example1 ex; //object created
ex.display(); // display method called return 0;
)

Výstup:

Ve výše uvedeném příkladu je 'Example1' název třídy a 'ex' je objekt vytvořený z této třídy. Nejprve se vyvolá konstruktor, takže se text napsaný v konstruktoru vytiskne, potom se metoda zobrazení nazývá ana, nakonec se destruktor vyvolá po dokončení celého provádění programu.

Příklad č. 2: Program s virtuálním ničitelem

Kód:

#include
using namespace std;
class b1 ( //base class
public:
b1() // constructor of base class
(
cout << “Hello this is base constructor” << endl;
)
~virtual b1() // destructor of base class
(
cout << “Hello this is base destructor” << endl;
)
);
class b2: public b1( // derived class of base class (b1) public:
b2() //constructor of derived cass
(
cout << “Hello this is derived constructor” << endl;
)
~ b2() // destructor of derived class
(
cout << “Hello this is derived destructor” << endl;
)
);
int main(void) //main method
(
b2 *der = new b2();
b1 *bas = der;
delete der;
getchar();
return 0;
)

Výstup:

Dobrým postupem je učinit destruktor základní třídy tak virtuálním, protože to zajistí, že objekt odvozené třídy bude správně zničen. Kdykoli je použita virtuální třída, měl by být okamžitě přidán virtuální destruktor, aby se zabránilo budoucím neočekávaným výsledkům.

Výhody Destructor v C ++

  • Poskytuje poslední šanci vyčistit prostředky, které se nepoužívají k uvolnění paměti obsazené nepoužitými objekty, jako je mazání dynamických objektů, zavření systémových úchytů, použitých souborů.
  • Kvůli množství zdrojů zabírajících místo a nezvykle používaným v počítači, destruktor vždy přichází s dobrým obrazem, který snižuje šance na únik paměti zničením těchto nevyužitých věcí.
  • I když C ++ má mechanismus Garbage Collection, ale volání destruktoru automaticky, ať už ho programátor volá nebo uvolní místo, zabrání uživateli v budoucnu mnoha nejhorších situací.

Body k shrnutí o ničiteli

  • Destruktory se používají ke zničení nevyužitých zdrojů třídy.
  • Destruktory mají stejné jméno jako název třídy před znaménkem (~).
  • Na rozdíl od konstruktorů nemůže existovat žádný parametr destruktoru.
  • Neexistuje žádný návratový typ destruktoru.
  • Pokud uživatel nedefinuje destruktor sám v programu, kompilátor pro něj automaticky vytvoří jeden destruktor.
  • V jedné třídě nemůže být více než jeden destruktor.

Závěr

Výše uvedený popis destruktorů jasně definuje použití a implementaci destruktoru v programu C ++. I když koncept destruktoru není složitý, přesto je velmi důležité porozumět před implementací v programu, protože nesprávné použití destruktoru může vést k neočekávaným výsledkům.

Doporučený článek

Toto je průvodce Destructorem v C ++. Zde diskutujeme Úvod do Destructor v C ++ a Working of Destructor spolu s výhodami. Další informace naleznete také v dalších navrhovaných článcích -

  1. Destruktor v Javě (příklady)
  2. Úvod do Overriding v C ++
  3. Vzory v C ++ (příklady)
  4. Typy konstruktorů v C ++
  5. Destruktor v Pythonu (syntaxe, příklady)

Kategorie: