Introduktion til Destructor i C ++

Som vi alle ved, er C ++ et objektorienteret programmeringssprog og bruges i vid udstrækning inden for it-brancher til udvikling af software, drivere, indbygget firmware og klient-server applikationer. Det er et sprog på mellemniveau, der indkapsler funktioner på både højt niveau og lavt niveau. Det har et begreb af klasser og genstande. I C ++ spiller konstruktørerne en vigtig rolle i at skabe et objekt og initialisere instansvariablerne, men hvad sker der med disse objekter og ressourcer, når de ikke længere er i brug eller programmet slutter? Dette ansvar tages af Destructors i C ++. Destruktorer bruges til at ødelægge de objekter, der er oprettet af konstruktørerne, når de ikke længere er nødvendige for at frigive hukommelsen. De er specielle medlemsfunktioner og kaldes automatisk af C ++. kompilator for at frigøre hukommelsen, når der ikke er nogen brugerdefineret destructor i programmet. Ligesom konstruktører har destruktører også det samme navn som klassen forud for et tilde (~) tegn. Men destructor accepterer ikke nogen argumenter / parametre og returnerer ikke noget, dvs. de har ikke nogen returtype.

Destruktorer kan aldrig overbelastes som konstruktører i en klasse. Nedenfor er vist nogle af de situationer, hvor destruktoren kaldes automatisk af kompilatoren:

  • Når en sletningsoperatør kaldes.
  • Når programudførelsen er færdig.
  • Når blokken / omfanget af lokale variabler slutter.

En programmerer kan definere en destruktor kendt som en bruger-designet konstruktør. En destructor kan erklæres som virtuel eller ren virtuel, men kan ikke erklæres const, flygtig, const flygtig eller statisk.

Hvordan fungerer Destructor i C ++?

For at arbejde med destruktor skal de nedenstående punkter huskes:

  • Destruktører af klasseobjekter kaldes først, før de kaldes destruktoren for medlemmer og baser. Destruktører af den ikke-virtuelle baseklasse kaldes før destruktørerne af den virtuelle baseklasse.
  • Før baseklasser kaldes destruktoren af ​​ikke-statiske medlemmer. Destruktører af både virtuelle og ikke-virtuelle baseklasser kaldes i omvendt rækkefølge af deres erklæring.
  • Implicitte destruktorer kaldes automatisk af C ++ -kompilatoren, når et objekt går ud af rækkevidden, eller programudførelsen afsluttes for eksterne og statiske objekter i et program. Destruktorerne kaldes til at ødelægge objekter oprettet med et nyt nøgleord.
  • I tilfælde af både implicitte og brugerdefinerede destruktorer, udfører kompilatoren først destruktorkroppen og kalder derefter destruktører af alle ikke-statiske ikke-variantklasser og kalder derefter ødelæggere af ikke-virtuelle og virtuelle baseklasser i omvendt rækkefølge af deres konstruktion.

Destruktors syntaks

Destruktorer i C ++ indledes med tilde (~) -skiltet. Nedenfor er nævnt den grundlæggende syntaks for destruktor:

Syntaks:

Class class_name()
(


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

I syntaks er 'klassens navn' klassens navn og i hovedmetoden er både konstruktøren og destruktoren med samme navn på klassen defineret. Destructor har hverken parametre eller returtype.

Eksempler på Destructor i C ++

Nedenfor nævnes eksemplet på Destructor i C ++:

Eksempel 1: Program med brugerdefineret Destructor

Kode:

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

Produktion:

I ovenstående eksempel er 'Eksempel 1' navnet på klassen, og 'ex' er det objekt, der er oprettet af denne klasse. Først kaldes konstruktøren, så den tekst, der er skrevet i konstruktøren, udskrives, derefter kaldes displaymetoden ana, til sidst kaldes destruktoren, når hele udførelsen af ​​programmet er afsluttet.

Eksempel 2: Program med Virtual Destructor

Kode:

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

Produktion:

Det er en god praksis at gøre ødelæggeren af ​​baseklassen så virtuel, da dette sikrer, at objektet fra den afledte klasse ødelægges korrekt. Hver gang en virtuel klasse bruges, skal der tilføjes en virtuel destruktor straks for at forhindre fremtidige uventede resultater.

Fordelene ved Destructor i C ++

  • Det giver den endelige chance for at rydde op i de ressourcer, der ikke er i brug til at frigive hukommelsen, der er besat af ubrugte objekter, f.eks.
  • På grund af en masse ressourcer, der besætter plads og ikke bliver vant til computeren, kommer destruktor altid med et godt billede for at reducere chancerne for hukommelseslækage ved at ødelægge disse ubrugte ting.
  • Skønt C ++ har mekanismen Garbage Collection, men at kalde destruktoren automatisk, uanset om programmereren kalder det eller ikke for at frigøre plads, forhindrer brugeren i mange værste situationer i fremtiden.

Punkter til at opsummere om Destructor

  • Destruktorer bruges til at ødelægge de ubrugte ressourcer i en klasse.
  • Destruktorer har samme navn som klassens navn forud med (~) tegn.
  • I modsætning til konstruktører kan der ikke være nogen parameter for destruktoren.
  • Der er ingen returnerende type destruktor.
  • Hvis brugeren ikke definerer destruktoren i sig selv i et program, konstruerer compileren automatisk en destruktor til den.
  • Der kan ikke være mere end en destruktor i en enkelt klasse.

Konklusion

Ovenstående beskrivelse af destruktorer definerer klart brugen og implementeringen af ​​destruktoren i C ++ -programmet. Selvom konceptet med destruktoren ikke er kompleks, er det alligevel meget vigtigt at forstå, før implementering i programmet, da forkert brug af destruktoren kan føre til nogle uventede resultater.

Anbefalet artikel

Dette er en guide til Destructor i C ++. Her diskuterer vi Introduktion til Destructor i C ++ og Working of Destructor sammen med Fordele. Du kan også gennemgå vores andre foreslåede artikler for at lære mere–

  1. Destructor i Java (eksempler)
  2. Introduktion til tilsidesættelse i C ++
  3. Mønstre i C ++ (eksempler)
  4. Typer af konstruktør i C ++
  5. Destructor i Python (syntaks, eksempler)

Kategori: