Destructorin esittely C ++: ssa

Kuten kaikki tiedämme, C ++ on oliokeskeinen ohjelmointikieli, jota käytetään laajasti IT-teollisuudessa ohjelmistojen, ohjainten, sulautettujen laiteohjelmistojen ja asiakas-palvelinsovellusten kehittämiseen. Se on keskitason kieli, joka kapseloi sekä korkean että matalan kielen ominaisuudet. Sillä on käsite luokista ja esineistä. C ++: ssa konstruktoreilla on tärkeä rooli objektin luomisessa ja ilmentymän muuttujien alustamisessa, mutta mitä tapahtuu näille objekteille ja resursseille sen jälkeen, kun niitä ei enää käytetä tai ohjelma päättyy? C ++: n Destructors huolehtii tästä vastuusta. Hävittäjiä käytetään tuhoamaan rakentajien luomat objektit, kun niitä ei enää tarvita muistin vapauttamiseen. Ne ovat erityisiä jäsentoimintoja, ja C ++ kutsuu ne automaattisesti. kääntäjä muistin vapauttamiseksi, kun ohjelmassa ei ole käyttäjän määrittämää tuhoajaa. Kuten rakentajat, myös rakentajilla on sama nimi kuin luokalla, jota edeltää tilde (~) -merkki. Mutta tuhoaja ei hyväksy mitään argumentteja / parametreja eikä palauta mitään, ts. Heillä ei ole paluutapaa.

Tuhoajia ei voi koskaan ylikuormittaa kuin luokan rakentajia. Alla on joitain tilanteita, joissa kääntäjä kutsuu tuhoaja automaattisesti:

  • Kun kutsutaan poistooperaattoria.
  • Kun ohjelman suorittaminen on valmis.
  • Kun paikallisten muuttujien lohko / laajuus päättyy.

Ohjelmoija voi määrittää tuhoajan, jota kutsutaan käyttäjän suunnittelemaan rakentajaksi. Tuhoaja voidaan julistaa virtuaalisiksi tai puhtaiksi virtuaaleiksi, mutta niitä ei voida julistaa constiksi, haihtuvaksi, const haihtuvaksi tai staattiseksi.

Kuinka Destructor toimii C ++: ssa?

Tuhoajan työskentelyssä on pidettävä mielessä seuraavat kohdat:

  • Luokkaobjektien hävittäjät kutsutaan ensin ennen jäsenten ja tukikohtien hävittäjän kutsumista. Ei-virtuaalisen perusluokan hävittäjiä kutsutaan ennen virtuaalisen tukiluokan hävittäjiä.
  • Ennen perusluokkia kutsutaan ei-staattisten jäsenten tuhoaja. Sekä virtuaalisten että ei-virtuaalisten kantaluokkien hävittäjiä kutsutaan ilmoituksen käänteisessä järjestyksessä.
  • C ++ -kääntäjä kutsuu implisiittiset destruktorit automaattisesti, kun objekti poistuu laajuudesta tai ohjelman suorittaminen päättyy ohjelman ulkoisille ja staattisille kohteille. Tuhoajia kutsutaan tuhoamaan uuden avainsanan luomat objektit.
  • Sekä implisiittisten että käyttäjän määrittämien destruktorien tapauksessa kääntäjä ensin suorittaa tuhoajan rungon ja kutsuu sitten kaikkien ei-staattisten ei-varianttiluokkien destruktoreita ja kutsuu sitten ei-virtuaalisten ja virtuaalisten kantaluokkien destruktoreita käänteisessä järjestyksessä. niiden rakentaminen.

Hävittäjän syntaksi

C ++: n tuhoajia edeltää tilde (~) -merkki. Seuraavassa on tuhoajan perussintaksi:

Syntaksi:

Class class_name()
(


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

Syntaksissa 'luokan_nimi' on luokan nimi ja päämenetelmässä määritetään sekä rakentaja että tuhoaja, joilla on sama luokan nimi. Tuhoajalla ei ole parametreja eikä paluutapaa.

Esimerkkejä C ++: n tuhoajasta

Seuraavassa on esimerkki C ++: n tuhoajasta:

Esimerkki 1: Ohjelma käyttäjän määrittämällä hävittäjällä

Koodi:

#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;
)

lähtö:

Yllä olevassa esimerkissä 'Esimerkki 1' on luokan nimi ja 'ex' on luokan luoma objekti. Ensin kutsutaan rakentajaksi, joten rakentajaan kirjoitettu teksti tulostetaan, sitten näyttömenetelmää kutsutaan anaksi, viimeinkin hävittäjä kutsutaan, kun koko ohjelma on suoritettu.

Esimerkki 2: Ohjelma virtuaalisen hävittäjän kanssa

Koodi:

#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;
)

lähtö:

On hyvä käytäntö tehdä perusluokan tuhoaja virtuaaliseksi, koska se varmistaa, että johdetun luokan kohde tuhoutuu kunnolla. Aina kun käytetään virtuaaliluokkaa, virtuaalinen tuhoaja tulisi lisätä välittömästi, jotta vältetään tulevaisuudessa odottamattomat tulokset.

Destructorin edut C ++: ssa

  • Se antaa viimeisen mahdollisuuden puhdistaa resurssit, joita ei käytetä käyttämättömien kohteiden käyttämän muistin vapauttamiseksi, kuten dynaamisten objektien poistaminen, järjestelmän kahvojen sulkeminen, käytetyt tiedostot.
  • Koska paljon resursseja vie tilaa, eikä sitä käytetä tietokoneeseen, hävittäjän mukana tulee aina hyvä kuva, joka vähentää muistin vuotamismahdollisuuksia tuhoamalla nämä käyttämättömät asiat.
  • Vaikka C ++: lla onkin jätteiden keräysmekanismi, mutta hävittäjän kutsuminen automaattisesti, kutsuuko ohjelmoija siihen vai ei, vapauta tilaa, estää käyttäjää tulevaisuuden monista pahimmista tilanteista.

Yhteenveto Destructorista

  • Destructereita käytetään luokan käyttämättömien resurssien tuhoamiseen.
  • Tuhoajilla on sama nimi kuin edeltävällä luokan nimellä (~) -merkillä.
  • Toisin kuin rakentajat, tuhoajan parametria ei voi olla.
  • Tuhoavaa tyyppiä ei ole.
  • Jos käyttäjä ei itse määrittele hävittäjää ohjelmassa, kääntäjä rakentaa automaattisesti yhden hävittäjän sille.
  • Yhdessä luokassa voi olla vain yksi tuhoaja.

johtopäätös

Yllä oleva destruktorien kuvaus määrittelee selvästi destruktorin käytön ja toteutuksen C ++ -ohjelmassa. Vaikka hävittäjän käsite ei ole monimutkainen, on kuitenkin erittäin tärkeää ymmärtää se ennen ohjelman toteuttamista, koska hävittäjän virheellinen käyttö voi johtaa odottamattomiin tuloksiin.

Suositeltava artikkeli

Tämä on opas Destructoriin C ++: ssa. Tässä keskustellaan C ++: n johdannosta Destructoriin ja Destructorin työskentelystä sekä eduistaan. Voit myös käydä läpi muiden ehdotettujen artikkeleidemme saadaksesi lisätietoja -

  1. Hävittäjä Java (esimerkit)
  2. Johdanto ohittamiseen C ++: ssa
  3. Kuviot C ++: ssa (esimerkit)
  4. C ++: n konstruktorityypit
  5. Destructor Pythonissa (syntaksi, esimerkit)