Introduktion till Destructor i C ++

Som vi alla vet är C ++ ett objektorienterat programmeringsspråk och används allmänt inom IT-branscher för utveckling av programvara, drivrutiner, inbäddad firmware och klient-serverapplikationer. Det är ett språket på medelnivå som inkapslar funktioner för både högnivå och lågnivåspråk. Det har ett begrepp av klasser och objekt. I C ++ spelar konstruktörerna en viktig roll i att skapa ett objekt och initiera instansvariablerna, men vad händer med dessa objekt och resurser efter att de inte längre är i bruk eller programmet slutar? Detta ansvar tas om hand av Destructors i C ++. Destruktorer används för att förstöra föremål som skapats av konstruktörerna när de inte behövs längre för att frigöra minnet. De är speciella medlemsfunktioner och anropas automatiskt av C ++. kompilator för att frigöra minnet när det inte finns någon användardefinierad destruktor i programmet. Precis som konstruktörer har destruktorer också samma namn som klass föregås av ett tilde (~) -skylt. Men destruktorn accepterar inga argument / parametrar och returnerar ingenting, dvs de har ingen returtyp.

Destruktorer kan aldrig överbelastas som konstruktörer i en klass. Nedan ges några av de situationer där förstöraren kallas automatiskt av kompilatorn:

  • När en raderaoperatör anropas.
  • När programkörningen är klar.
  • När blocket / omfattningen av lokala variabler slutar.

En programmerare kan definiera en destruktor känd som en användar-designad konstruktör. En förstörare kan förklaras som virtuell eller ren virtuell men kan inte förklaras konst, flyktig, konst flyktig eller statisk.

Hur fungerar Destructor i C ++?

För att arbeta med destruktorn måste nedanstående punkter komma ihåg:

  • Destruktorer av klassobjekt kallas först innan de kallas för destruktorn för medlemmar och baser. Destruktorer av den icke-virtuella basklassen kallas före förstörarna av den virtuella basklassen.
  • Innan basklasserna kallas förstöraren av icke-statiska medlemmar. Destruktorer av både virtuella och icke-virtuella basklasser kallas i omvänd ordning för deras deklaration.
  • Implicita destruktorer kallas automatiskt av C ++ -kompilatorn när ett objekt går utanför räckvidden eller programutförandet avslutas för externa och statiska objekt i ett program. Förstörarna kallas för att förstöra föremål som skapats av ett nytt nyckelord.
  • När det gäller både implicita och användardefinierade destruktorer, kör kompilatorn först förstörarkroppen och kallar sedan förstörare av alla icke-statiska icke-variant-klasser och kallar sedan förstörarna av icke-virtuella och virtuella basklasser i omvänd ordning av deras konstruktion.

Syntax of Destructor

Destruktorer i C ++ föregås av tegnet tilde (~). Nedan nämns är den grundläggande syntaxen för destructor:

Syntax:

Class class_name()
(


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

I syntaxen är "klassnamn" klassnamnet och i huvudmetoden definieras både konstruktören och destruktorn med samma namn på klassen. Destructor har varken några parametrar eller returtyp.

Exempel på Destructor i C ++

Nedan nämns exemplet på Destructor i C ++:

Exempel 1: Program med användardefinierad Destructor

Koda:

#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 exemplet ovan är 'Exempel 1' namnet på klassen och 'ex' är objektet som skapades för den klassen. Först kallas konstruktören, så den text som skrivs i konstruktören skrivs ut, därefter kallas visningsmetoden ana, äntligen kallas förstöraren efter att hela programmet har genomförts.

Exempel 2: Program med Virtual Destructor

Koda:

#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 är en bra praxis att göra förstöraren av basklassen så virtuell eftersom detta säkerställer att objektet för den härledda klassen förstörs ordentligt. När en virtuell klass används bör en virtuell destruktor läggas till omedelbart för att förhindra eventuella framtida oväntade resultat.

Fördelarna med Destructor i C ++

  • Det ger den sista chansen att rensa upp resurserna som inte används för att frigöra minnet som upptas av oanvända objekt som att radera dynamiska objekt, stänga av systemhandtagen, använda filer.
  • På grund av mycket resurser som tar plats och inte används i datorn, kommer destruktor alltid med en bra bild för att minska riskerna för minnesläcka genom att förstöra de oanvända sakerna.
  • Även om C ++ har mekanismen för Garbage Collection men att ringa förstöraren automatiskt om programmeraren kallar det eller inte för att frigöra utrymme förhindrar användaren från många värsta situationer i framtiden.

Pekar för att sammanfatta om Destructor

  • Destruktorer används för att förstöra de outnyttjade resurserna i en klass.
  • Destruktorer har samma namn som klassnamnet föregående med (~) tecken.
  • Till skillnad från konstruktörer kan det inte finnas någon parameter för förstöraren.
  • Det finns ingen returtyp av förstörare.
  • Om användaren inte definierar förstörare av sig själv i ett program, konstruerar kompilatorn automatiskt en destruktor för den.
  • Det kan inte finnas mer än en förstörare i en enda klass.

Slutsats

Ovanstående beskrivning av destruktorer definierar tydligt användningen och implementeringen av destruktorn i C ++ -programmet. Även om begreppet förstörare inte är komplexa är det ändå mycket viktigt att förstå innan implementering i programmet eftersom felaktig användning av destruktor kan leda till några oväntade resultat.

Rekommenderad artikel

Detta är en guide till Destructor i C ++. Här diskuterar vi Introduktion till Destructor i C ++ och Working of Destructor tillsammans med fördelar. Du kan också gå igenom våra andra artiklar som föreslås för att lära dig mer–

  1. Destructor i Java (exempel)
  2. Introduktion till åsidosättande i C ++
  3. Mönster i C ++ (exempel)
  4. Typer av konstruktörer i C ++
  5. Destruktor i Python (syntax, exempel)

Kategori: