Úvod do Destructor v C ++

Ako všetci vieme, C ++ je objektovo orientovaný programovací jazyk a je široko používaný v IT odvetviach na vývoj softvéru, ovládačov, vstavaného firmvéru a aplikácií typu klient-server. Je to jazyk na strednej úrovni zapuzdrujúci vlastnosti jazyka vysokej aj nízkej úrovne. Má koncept tried a predmetov. V C ++ zohrávajú konštruktori dôležitú úlohu pri vytváraní objektu a inicializácii premenných inštancie, ale čo sa stane s týmito objektmi a zdrojmi potom, čo sa už nepoužívajú alebo keď program skončí? O túto zodpovednosť sa starajú Destructors v C ++. Destruktory sa používajú na zničenie objektov vytvorených Konštruktormi, keď už nie sú potrebné na uvoľnenie pamäte. Sú to špeciálne členské funkcie a automaticky ich volá C ++. kompilátor na uvoľnenie pamäte, keď v programe nie je užívateľsky definovaný deštruktor. Rovnako ako konštruktory, aj deštruktory majú rovnaké meno ako trieda, ktorému predchádza znak vlnovky (~). Ničiteľ však neakceptuje žiadne argumenty / parametre a nevracia nič, tj nemá žiadny typ návratu.

Ničiteľ nemôže byť nikdy preťažený ako konštruktér v triede. Nižšie sú uvedené niektoré situácie, keď kompilátor automaticky volá deštruktor:

  • Pri volaní operátora vymazania.
  • Po dokončení vykonávania programu.
  • Keď blok / rozsah lokálnych premenných končí.

Programátor môže definovať deštruktor známy ako konštruktor navrhnutý používateľom. Ničiteľ môže byť deklarovaný ako virtuálny alebo čisto virtuálny, ale nemôže byť deklarovaný ako konštanta, volatile, const volatile alebo statický.

Ako Destructor pracuje v C ++?

Pri fungovaní deštruktora je potrebné mať na pamäti nasledujúce body:

  • Destruktory objektov triedy sa volajú ako prvé pred volaním deštruktora členov a báz. Destruktory nevirtuálnej základnej triedy sa volajú pred deštruktormi virtuálnej základnej triedy.
  • Pred základnými triedami sa nazýva deštruktor nestatických členov. Ničitelia virtuálnych aj nevirtuálnych základných tried sa nazývajú v opačnom poradí, v akom sú uvedené.
  • Implicitné deštruktory sa volajú automaticky kompilátorom C ++, keď objekt zmizne z rozsahu alebo keď sa vykonávanie programu ukončí pre externé a statické objekty v programe. Deštruktory sa volajú, aby zničili objekty vytvorené novým kľúčovým slovom.
  • V prípade implicitných aj užívateľom definovaných deštruktorov kompilátor najskôr vykoná telo deštruktora a potom volá deštruktory všetkých nestatických netradičných tried a potom volá deštruktory neintuitívnych a virtuálnych základných tried v opačnom poradí ako ich konštrukcia.

Syntax deštruktora

Destruktorom v C ++ predchádza znak vlnovky (~). Nižšie je uvedená základná syntax deštruktora:

syntaxe:

Class class_name()
(


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

V syntaxi je 'class_name' názov triedy a v hlavnej metóde sú definované konštruktor aj deštruktor s rovnakým názvom triedy. Destruktor nemá ani parametre, ani typ návratu.

Príklady Destruktora v C ++

Nižšie je uvedený príklad Destructor v C ++:

Príklad č. 1: Program s používateľom definovaným ničiteľom

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ýkon:

Vo vyššie uvedenom príklade je 'Example1' názov triedy a 'ex' je objekt vytvorený z tejto triedy. Najprv sa vyvolá konštruktor, takže sa vytlačí text napísaný v konštruktore, potom sa spôsob zobrazenia nazýva ana, nakoniec sa deštruktor vyvolá po dokončení celého vykonávania programu.

Príklad č. 2: Program s virtuálnym ničiteľom

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ýkon:

Dobrým postupom je urobiť deštruktor základnej triedy tak virtuálnym, pretože to zaistí, že objekt odvodenej triedy je správne zničený. Kedykoľvek sa používa virtuálna trieda, mal by sa okamžite pridať virtuálny deštruktor, aby sa zabránilo akýmkoľvek budúcim neočakávaným výsledkom.

Výhody Destructor v C ++

  • Poskytuje poslednú šancu na vyčistenie zdrojov, ktoré sa nepoužívajú na uvoľnenie pamäte, ktorú zaberajú nepoužité objekty, ako je napríklad odstránenie dynamických objektov, zatvorenie systémových úchytiek, použité súbory.
  • Pretože veľa zdrojov zaberá miesto a nie je v počítači zvyknutá, deštruktor vždy prichádza s dobrým obrazom, ktorý znižuje pravdepodobnosť úniku pamäte zničením týchto nevyužitých vecí.
  • Aj keď C ++ má mechanizmus zbierania odpadu, ale volanie deštruktora automaticky, či ho programátor volá alebo nemá uvoľniť miesto, zabráni používateľovi v budúcnosti v mnohých najhorších situáciách.

Body na zhrnutie o Destruktore

  • Destruktory sa používajú na zničenie nevyužitých zdrojov triedy.
  • Destruktory majú rovnaký názov ako názov triedy pred znakom (~).
  • Na rozdiel od konštruktorov nemôže existovať žiadny parameter deštruktora.
  • Neexistuje žiadny návratový typ deštruktora.
  • Ak užívateľ nedefinuje deštruktor sám v programe, kompilátor preň automaticky vytvorí jeden deštruktor.
  • V jednej triede nemôže byť viac ako jeden deštruktor.

záver

Vyššie uvedený opis deštruktorov jasne definuje použitie a implementáciu deštruktora v programe C ++. Hoci pojem deštruktor nie je zložitý, je veľmi dôležité porozumieť pred implementáciou do programu, pretože nesprávne použitie deštruktora môže viesť k neočakávaným výsledkom.

Odporúčaný článok

Toto je sprievodca Destructorom v C ++. Tu diskutujeme Úvod do Destructor v C ++ a Working of Destructor spolu s výhodami. Viac informácií nájdete aj v ďalších navrhovaných článkoch -

  1. Destruktor v Jave (príklady)
  2. Úvod do ovládania v C ++
  3. Vzory v C ++ (príklady)
  4. Typy konštruktorov v C ++
  5. Destruktor v Pythone (syntax, príklady)

Kategórie: