Sissejuhatus C ++ destruktorisse

Nagu me kõik teame, on C ++ objektorienteeritud programmeerimiskeel ja seda kasutatakse IT-tööstuses laialdaselt tarkvara, draiverite, manustatud püsivara ja kliendi-serveri rakenduste arendamisel. See on kesktaseme keel, mis sisaldab nii kõrge kui ka madala keele omadusi. Sellel on klasside ja objektide kontseptsioon. C ++-s mängivad konstruktorid olulist rolli objekti loomisel ja esinemismuutujate lähtestamisel, kuid mis juhtub nende objektide ja ressurssidega pärast seda, kui neid enam ei kasutata või programm lõpeb? Selle vastutuse eest hoolitsevad C ++ hävitajad. Destruktoreid kasutatakse konstruktorite loodud objektide hävitamiseks, kui neid pole enam vaja mälu vabastamiseks. Need on spetsiaalsed liikmefunktsioonid ja neid kutsub automaatselt C ++. kompilaator mälu vabastamiseks, kui programmis pole kasutaja määratud hävitajat. Nagu konstruktoritel, on ka destruktoritel sama nimi kui klassil, millele eelneb tilde (~) märk. Kuid hävitaja ei aktsepteeri ühtegi argumenti / parameetrit ega tagasta midagi, st neil puudub tagastamise tüüp.

Destruktoreid ei saa kunagi üle koormata nagu klassi konstruktoreid. Allpool on toodud mõned olukorrad, kus kompilaator kutsub hävitaja automaatselt:

  • Kui kutsutakse kustutamisoperaator.
  • Kui programmi täitmine on lõpule jõudnud.
  • Kui kohalike muutujate plokk / ulatus lõpeb.

Programmeerija saab määratleda hävitaja, mida nimetatakse kasutaja kujundatud konstruktoriks. Hävitaja võib kuulutada virtuaalseks või puhtaks virtuaalseks, kuid seda ei saa kuulutada konstantseks, lenduvaks, konstantseks lenduvaks ega staatiliseks.

Kuidas Destructor töötab C ++ -s?

Hävitaja töötamisel tuleb silmas pidada allpool nimetatud punkte:

  • Klassiobjektide hävitajad kutsutakse kõigepealt enne liikmete ja aluste hävitaja kutsumist. Mitte-virtuaalse põhiklassi hävitajad kutsutakse virtuaalse põhiklassi hävitajate ette.
  • Enne põhiklasse kutsutakse mittestaatiliste liikmete hävitaja. Nii virtuaalsete kui ka mitte-virtuaalsete baasklasside hävitajaid kutsutakse nende deklaratsiooni vastupidises järjekorras.
  • Kaudseid hävitajaid kutsub C ++ kompilaator automaatselt, kui objekt väljub ulatusest või kui programmi täitmine lõpeb programmi väliste ja staatiliste objektide jaoks. Hävitajad kutsutakse uue märksõna abil loodud objekte hävitama.
  • Nii kaudsete kui ka kasutaja määratletud destruktorite puhul käivitab kompilaator esmalt destruktori korpuse ja kutsub seejärel kõigi mittestaatiliste mittevariandiklasside destruktorid ning kutsub siis mitte-virtuaalsete ja virtuaalsete baasklasside destruktorid vastupidises järjekorras. nende ehitamine.

Hävitaja süntaks

C ++ hävitajatele eelneb märk tilde (~). Allpool on toodud hävitaja põhiline süntaks:

Süntaks:

Class class_name()
(


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

Süntaksis on 'klassi_nimi' klassi nimi ja põhimeetodi korral on määratletud nii konstruktor kui ka klassi sama nimega destruktor. Hävitajal pole parameetreid ega tagasivõtutüüpi.

C ++ hävitaja näited

Allpool on näide C ++ hävitajast:

Näide # 1: programm kasutaja määratud hävitajaga

Kood:

#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äljund:

Ülaltoodud näites on 'Näide1' klassi nimi ja 'ex' on selle klassi loodud objekt. Esiteks kutsutakse konstruktor, nii et trükitakse konstruktorisse kirjutatud tekst, seejärel kuvatakse kuvamismeetod ana, lõpuks kutsutakse hävitaja pärast kogu programmi täitmist.

Näide 2: programm virtuaalse hävitajaga

Kood:

#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äljund:

Hea tava on muuta põhiklassi hävitaja virtuaalseks, kuna see tagab tuletatud klassi objekti hävitamise. Igakordse virtuaalse klassi kasutamisel tuleks viivitamatult lisada virtuaalne hävitaja, et vältida tulevikus ootamatuid tulemusi.

Destructori eelised rakenduses C ++

  • See annab viimase võimaluse puhastada ressursse, mida ei kasutata, et vabastada kasutamata objektide poolt hõivatud mälu, näiteks dünaamiliste objektide kustutamine, süsteemi käepidemete sulgemine, kasutatud failid.
  • Kuna palju ressursse võtab ruumi ja arvutit ei kasutata, tuleb hävitajal alati hea pilt, et vähendada mälu lekkimise võimalusi, hävitades need kasutamata asjad.
  • C ++ -l on küll prügivedude mehhanism, kuid hävitaja helistamine automaatselt, kas programmeerija kutsub seda ruumi vabastamiseks või mitte, takistab kasutajat tulevikus paljudest halvimatest olukordadest.

Destructori kohta kokkuvõte

  • Hävitajaid kasutatakse klassi kasutamata ressursside hävitamiseks.
  • Hävitajatel on sama nimi kui klassi nimega, mis eelneb (~) tähisega.
  • Erinevalt konstruktoritest ei saa destruktori parameetreid olla.
  • Puudub tagastamise tüüp hävitaja.
  • Kui kasutaja ei määratle programmis hävitajat, konstrueerib kompilaator selle jaoks automaatselt ühe hävitaja.
  • Ühes klassis ei tohi olla rohkem kui üks hävitaja.

Järeldus

Ülaltoodud destruktorite kirjeldus määratleb selgelt hävitaja kasutamise ja rakendamise C ++ programmis. Ehkki hävitaja kontseptsioon pole keeruline, on siiski väga oluline seda enne programmi rakendamist mõista, kuna hävitaja vale kasutamine võib põhjustada ootamatuid tulemusi.

Soovitatav artikkel

See on C ++ hävitaja juhend. Siin käsitleme C ++-s sissejuhatust hävitajasse ja hävitaja tööd koos eelistega. Lisateavet leiate ka meie muudest soovitatud artiklitest -

  1. Hävitaja Java-s (näited)
  2. Sissejuhatus rakenduses C ++ alistamisele
  3. C ++ mustrid (näited)
  4. C ++ konstruktoritüübid
  5. Destruktor Pythonis (süntaks, näited)

Kategooria: