Introductie tot Destructor in C ++

Zoals we allemaal weten, is C ++ een objectgeoriënteerde programmeertaal en wordt het veel gebruikt in IT-industrieën voor de ontwikkeling van software, stuurprogramma's, ingebedde firmware en client-server-applicaties. Het is een taal op middelbaar niveau die functies van zowel een hoog als een laag taalniveau omvat. Het heeft een concept van klassen en objecten. In C ++ spelen de constructors een belangrijke rol bij het maken van een object en het initialiseren van de instantievariabelen, maar wat gebeurt er met deze objecten en bronnen nadat ze niet meer worden gebruikt of het programma wordt beëindigd? Deze verantwoordelijkheid wordt verzorgd door Destructors in C ++. Destructors worden gebruikt om de objecten te vernietigen die door de constructors zijn gemaakt wanneer ze niet meer nodig zijn om het geheugen vrij te maken. Het zijn speciale lidfuncties en worden automatisch aangeroepen door C ++. compiler om geheugen vrij te maken als er geen door de gebruiker gedefinieerde destructor in het programma is. Net als Constructors hebben destructors ook dezelfde naam als de klasse voorafgegaan door een tilde (~) teken. Maar destructor accepteert geen argumenten / parameters en retourneert niets, dwz ze hebben geen retourtype.

Destructors kunnen nooit worden overbelast zoals constructors in een klasse. Hieronder worden enkele situaties gegeven waarin de destructor automatisch door de compiler wordt aangeroepen:

  • Wanneer een verwijderoperator wordt opgeroepen.
  • Wanneer de uitvoering van het programma is voltooid.
  • Wanneer het blok / bereik van lokale variabelen eindigt.

Een programmeur kan een destructor definiëren die een door de gebruiker ontworpen constructor wordt genoemd. Een destructor kan worden verklaard als virtueel of puur virtueel, maar kan niet const, vluchtig, const vluchtig of statisch worden verklaard.

Hoe werkt Destructor in C ++?

Voor het werken met destructor moeten de onderstaande punten in acht worden genomen:

  • Destructors van klasseobjecten worden eerst aangeroepen voordat de destructor van leden en bases wordt aangeroepen. Destructors van de niet-virtuele basisklasse worden vóór de destructors van de virtuele basisklasse genoemd.
  • Voor de basisklassen wordt de destructor van niet-statische leden genoemd. Destructors van zowel virtuele als niet-virtuele basisklassen worden in de omgekeerde volgorde van hun aangifte genoemd.
  • Impliciete destructors worden automatisch aangeroepen door de C ++ compiler wanneer een object buiten bereik komt of de uitvoering van het programma wordt beëindigd voor externe en statische objecten in een programma. De vernietigers worden opgeroepen om de objecten te vernietigen die met een nieuw trefwoord zijn gemaakt.
  • In het geval van zowel impliciete als door de gebruiker gedefinieerde destructors, voert de compiler eerst de destructor body uit en roept vervolgens destructors van alle niet-statische niet-variante klassen aan en roept vervolgens de destructors van niet-virtuele en virtuele basisklassen op in de omgekeerde volgorde van hun constructie.

Syntaxis van Destructor

Destructors in C ++ worden voorafgegaan door het tilde (~) teken. Hieronder wordt de basissyntaxis van destructor vermeld:

Syntaxis:

Class class_name()
(


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

In de syntaxis is 'class_name' de klassenaam en in de hoofdmethode worden zowel de constructor als de destructor met dezelfde naam van de klasse gedefinieerd. Destructor heeft geen parameters en ook geen retourtype.

Voorbeelden van Destructor in C ++

Hieronder wordt het voorbeeld van Destructor in C ++ genoemd:

Voorbeeld # 1: Programma met door de gebruiker gedefinieerde destructor

Code:

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

Output:

In het bovenstaande voorbeeld is 'Voorbeeld1' de naam van de klasse en is 'ex' het object dat voor die klasse is gemaakt. Eerst wordt de constructor aangeroepen, dus de tekst die in de constructor is geschreven, wordt afgedrukt en vervolgens wordt de weergavemethode ana genoemd. Eindelijk wordt de destructor aangeroepen nadat de volledige uitvoering van het programma is voltooid.

Voorbeeld # 2: Programma met Virtual Destructor

Code:

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

Output:

Het is een goede gewoonte om de destructor van de basisklasse zo virtueel te maken, omdat dit ervoor zorgt dat het object van de afgeleide klasse correct wordt vernietigd. Wanneer een virtuele klasse wordt gebruikt, moet onmiddellijk een virtuele destructor worden toegevoegd om onverwachte toekomstige resultaten te voorkomen.

Voordelen van Destructor in C ++

  • Het geeft de laatste kans om de bronnen op te schonen die niet worden gebruikt om het geheugen vrij te maken dat wordt ingenomen door ongebruikte objecten zoals het verwijderen van dynamische objecten, het afsluiten van de systeemhandvatten, gebruikte bestanden.
  • Omdat veel bronnen ruimte innemen en niet op de computer wennen, komt destructor altijd met een goed imago om de kans op geheugenlekken te verminderen door die ongebruikte dingen te vernietigen.
  • Hoewel C ++ wel het mechanisme van Garbage Collection heeft, maar als de destructor automatisch wordt opgeroepen, ongeacht of de programmeur dit roept of niet, om ruimte vrij te maken, voorkomt de gebruiker in de ergste situaties in de toekomst.

Punten om samen te vatten over Destructor

  • Destructors worden gebruikt om de ongebruikte bronnen van een klasse te vernietigen.
  • Destructors hebben dezelfde naam als de klassennaam die voorafgaat met (~).
  • In tegenstelling tot Constructors kan er geen parameter van de destructor zijn.
  • Er is geen retourtype destructor.
  • Als de gebruiker zelf geen destructor in een programma definieert, bouwt de compiler er automatisch één destructor voor.
  • Er kan niet meer dan één vernietiger in een enkele klasse zijn.

Conclusie

De bovenstaande beschrijving van destructors definieert duidelijk het gebruik en de implementatie van destructor in het C ++ programma. Hoewel het concept van de destructor niet complex is, is het toch heel belangrijk om te begrijpen voordat implementatie in het programma als oneigenlijk gebruik van destructor kan leiden tot enkele onverwachte resultaten.

Aanbevolen artikel

Dit is een gids voor Destructor in C ++. Hier bespreken we Inleiding tot Destructor in C ++ en werking van Destructor samen met voordelen. U kunt ook onze andere voorgestelde artikelen doornemen voor meer informatie–

  1. Destructor in Java (voorbeelden)
  2. Inleiding tot negeren in C ++
  3. Patronen in C ++ (voorbeelden)
  4. Soorten constructor in C ++
  5. Destructor in Python (syntaxis, voorbeelden)