Bevezetés a pusztítóhoz a C ++-ban

Mint mindannyian tudjuk, a C ++ objektum-orientált programozási nyelv, amelyet széles körben használnak az informatikai iparban szoftver, illesztőprogramok, beágyazott firmware és kliens-szerver alkalmazások fejlesztésére. Ez egy középszintű nyelv, amely magában foglalja mind a magas, mind az alacsony szintű nyelv tulajdonságait. Van egy osztályok és tárgyak fogalma. A C ++ programban a konstruktorok fontos szerepet játszanak egy objektum létrehozásában és a példányváltozók inicializálásában, de mi történik ezekkel az objektumokkal és erőforrásokkal, miután már nem használják, vagy a program nem fejeződik be? Ezt a felelősséget a C ++ rombolói vigyázzák. A pusztítókat arra használják, hogy elpusztítsák a konstruktorok által létrehozott tárgyakat, amikor már nincs szükségük a memória felszabadítására. Ezek speciális tagfunkciók, amelyeket a C ++ automatikusan meghív. fordító, hogy felszabadítsa a memóriát, ha a programban nincs felhasználó által definiált pusztító. A konstruktorokhoz hasonlóan a destruktúráknak is ugyanaz a neve, mint az osztálynak, amelyet egy tilde (~) jel követ. De a pusztító nem fogad el argumentumokat / paramétereket és semmit sem ad vissza, azaz nincsenek visszatérési típusuk.

A pusztítókat soha nem lehet túlterhelni, mint egy osztály építőit. Az alábbiakban felsorolunk néhány olyan helyzetet, amikor a fordító automatikusan felhívja a pusztítót:

  • Amikor törlési operátort hívnak.
  • Amikor a program végrehajtása befejeződik.
  • Amikor a helyi változók blokkja / hatóköre véget ér.

A programozó meghatározhat egy pusztítót, amelyet felhasználó által tervezett kivitelezőnek hívnak. A pusztítót virtuálisnak vagy tiszta virtuálisnak lehet nyilvánítani, de nem lehet const, illékony, const illékony vagy statikus.

Hogyan működik a Destructor a C ++-ban?

A pusztító munkájához az alább említett szempontokat szem előtt kell tartani:

  • Az osztályobjektumok rombolóit először felhívják, mielőtt felhívják a tagok és a bázisok rombolóit. A nem-virtuális bázisosztály pusztítóit a virtuális bázisosztály pusztítóinak előtt hívják.
  • Az alaposztályok elõtt a nem statikus tagok pusztítóját hívják. Mind a virtuális, mind a nem-virtuális bázisosztályok elpusztítóit a deklaráció fordított sorrendjében hívják.
  • Az implicit destruktúrákat a C ++ fordító automatikusan meghívja, amikor egy objektum kikerül a hatókörből, vagy a program végrehajtása befejeződik egy program külső és statikus objektumain. A pusztítókat arra hívják, hogy elpusztítsák az új kulcsszó által létrehozott objektumokat.
  • Az implicit és a felhasználó által definiált destruktúrák esetében a fordító először végrehajtja a pusztító törzsét, majd az összes nem statikus, nem variáns osztály destruktátorait felhívja, majd a nem-virtuális és a virtuális bázis osztályok destrukttorait fordított sorrendben hívja fel. építésük.

A pusztító szintaxisa

A C ++ pusztítóit a tilde (~) jel előzi meg. Az alábbiakban bemutatjuk a pusztító alapszintaxisát:

Szintaxis:

Class class_name()
(


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

A szintaxisban az 'osztály_neve' az osztály neve, és a fő módszernél mind az osztály neve, mind az építője és a pusztítója meg van határozva. A pusztítónak nincs sem paramétere, sem visszatérő típusa.

Példák a C ++ destruktorra

Az alábbiakban megemlítjük a C ++ pusztító példáját:

1. példa: Program a felhasználó által definiált pusztítóval

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

Kimenet:

A fenti példában az „1. ​​példa” az osztály neve, az „ex” pedig az osztály által létrehozott objektum. Először az építőt hívják, tehát a konstruktorban írt szöveg kinyomtatásra kerül, majd a megjelenítési módszert ana-nak hívják, végül a pusztítót hívják, miután a program teljes végrehajtása megtörtént.

2. példa: Program a virtuális rombolóval

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

Kimenet:

Jó gyakorlat, ha az alaposztály pusztítóját virtuálissá teszik, mivel ez biztosítja, hogy a származtatott osztály objektuma megfelelő módon megsemmisüljön. Amikor virtuális osztályt használnak, azonnal hozzá kell adni egy virtuális pusztítót, hogy elkerüljék a jövőbeni váratlan eredményeket.

A Destructor előnyei a C ++-ban

  • Ez végső esélyt ad arra, hogy megtisztítsa a nem használt erőforrásokat a fel nem használt objektumok által elfoglalt memória felszabadítására, például dinamikus objektumok törlésére, a rendszer kezeli a használt fájlokat.
  • Mivel sok erőforrás foglal helyet, és nem szokott hozzászokni a számítógéphez, a pusztító mindig jó képpel jár, hogy csökkentse a memória szivárgásának esélyét azáltal, hogy megsemmisíti ezeket a fel nem használt dolgokat.
  • Bár a C ++ rendelkezik a Szemétgyűjtés mechanizmusával, de a pusztító automatikus felhívása, függetlenül attól, hogy a programozó felhívja-e vagy sem, hogy szabadítson fel helyet - megakadályozza a felhasználót a jövőben a legrosszabb helyzetekben.

Összefoglaló pontok a Destructorról

  • A pusztítókat arra használják, hogy elpusztítsák az osztály fel nem használt erőforrásait.
  • A pusztítóknak ugyanaz a neve, mint az osztály nevének (~) előzővel.
  • A kivitelezőktől eltérően nem lehet a pusztító paramétere.
  • Nincs visszatérő típusú pusztító.
  • Ha a felhasználó nem határozza meg a pusztítót egy programban, akkor a fordító automatikusan összeállít egy pusztítót ehhez.
  • Egy osztályban nem lehet egynél több pusztító.

Következtetés

A pusztítók fenti leírása világosan meghatározza a pusztító alkalmazását és megvalósítását a C ++ programban. Noha a pusztító fogalma nem bonyolult, mégis nagyon fontos megérteni a programba történő bevezetés előtt, mivel a pusztító szakszerűtlen használata váratlan eredményekhez vezethet.

Ajánlott cikk

Ez egy útmutató a Destructor számára a C ++ programban. Itt tárgyaljuk a C ++-ban a Destructor bevezetését és a Destructor működését, valamint az előnyeit. A további javasolt cikkeken keresztül további információkat is megtudhat -

  1. Destructor Java (példák)
  2. Bevezetés a C ++ felülbírálásába
  3. Minta C ++-ban (példák)
  4. A konstruktor típusai a C ++ kategóriában
  5. Destructor in Python (Szintaxis, példák)

Kategória: