Einführung in Destructor in C ++

Wie wir alle wissen, ist C ++ eine objektorientierte Programmiersprache und wird in der IT-Branche häufig für die Entwicklung von Software, Treibern, eingebetteter Firmware und Client-Server-Anwendungen verwendet. Es handelt sich um eine Sprache der mittleren Ebene, die sowohl Funktionen der höheren als auch der niedrigeren Ebene umfasst. Es hat ein Konzept von Klassen und Objekten. In C ++ spielen die Konstruktoren eine wichtige Rolle beim Erstellen eines Objekts und beim Initialisieren der Instanzvariablen. Was passiert jedoch mit diesen Objekten und Ressourcen, nachdem sie nicht mehr verwendet werden oder das Programm endet? Diese Verantwortung wird von Destructors in C ++ übernommen. Destruktoren werden verwendet, um die von den Konstruktoren erstellten Objekte zu zerstören, wenn sie nicht mehr benötigt werden, um den Speicher freizugeben. Sie sind spezielle Member-Funktionen und werden von C ++ automatisch aufgerufen. Compiler, um den Speicher freizugeben, wenn das Programm keinen benutzerdefinierten Destruktor enthält. Wie Konstruktoren haben auch Destruktoren denselben Namen wie Klassen, denen ein Tilde-Zeichen (~) vorangestellt ist. Aber destructor akzeptiert keine Argumente / Parameter und gibt nichts zurück, dh sie haben keinen Rückgabetyp.

Destruktoren können niemals wie Konstruktoren in einer Klasse überladen werden. Nachfolgend sind einige Situationen aufgeführt, in denen der Destruktor vom Compiler automatisch aufgerufen wird:

  • Wenn ein Löschoperator aufgerufen wird.
  • Wenn die Programmausführung beendet ist.
  • Wenn der Block / Gültigkeitsbereich lokaler Variablen endet.

Ein Programmierer kann einen Destruktor definieren, der als benutzerdefinierter Konstruktor bezeichnet wird. Ein Destruktor kann als virtuell oder rein virtuell deklariert werden, er kann jedoch nicht als const, volatile, const volatile oder static deklariert werden.

Wie funktioniert Destructor in C ++?

Bei der Arbeit mit Destruktoren sind folgende Punkte zu beachten:

  • Destruktoren von Klassenobjekten werden zuerst aufgerufen, bevor der Destruktor von Mitgliedern und Basen aufgerufen wird. Destruktoren der nicht virtuellen Basisklasse werden vor den Destruktoren der virtuellen Basisklasse aufgerufen.
  • Vor den Basisklassen wird der Destruktor von nicht statischen Elementen aufgerufen. Destruktoren sowohl virtueller als auch nicht virtueller Basisklassen werden in umgekehrter Reihenfolge ihrer Deklaration aufgerufen.
  • Implizite Destruktoren werden vom C ++ - Compiler automatisch aufgerufen, wenn ein Objekt den Gültigkeitsbereich verlässt oder die Programmausführung für externe und statische Objekte in einem Programm beendet wird. Die Destruktoren werden aufgerufen, um die durch ein neues Schlüsselwort erstellten Objekte zu zerstören.
  • Im Fall von impliziten und benutzerdefinierten Destruktoren führt der Compiler zuerst den Destruktortext aus und ruft dann Destruktoren aller nicht statischen nicht varianten Klassen auf und ruft dann die Destruktoren nicht virtueller und virtueller Basisklassen in umgekehrter Reihenfolge auf ihre Konstruktion.

Syntax des Destruktors

Destruktoren in C ++ wird das Tildezeichen (~) vorangestellt. Nachfolgend ist die grundlegende Syntax des Destruktors aufgeführt:

Syntax:

Class class_name()
(


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

In der Syntax ist 'class_name' der Klassenname und in der main-Methode sind sowohl der Konstruktor als auch der Destruktor mit demselben Klassennamen definiert. Destruktor hat weder Parameter noch Rückgabetyp.

Beispiele für Destruktor in C ++

Nachfolgend ist das Beispiel für Destructor in C ++ aufgeführt:

Beispiel 1: Programmieren mit benutzerdefiniertem Destruktor

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

Ausgabe:

Im obigen Beispiel ist 'Example1' der Name der Klasse und 'ex' das Objekt, das von dieser Klasse erstellt wurde. Zuerst wird der Konstruktor aufgerufen, der im Konstruktor geschriebene Text wird gedruckt, dann die Anzeigemethode und schließlich der Destruktor, nachdem die gesamte Ausführung des Programms abgeschlossen ist.

Beispiel # 2: Programmieren mit 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;
)

Ausgabe:

Es wird empfohlen, den Destruktor der Basisklasse so virtuell wie möglich zu gestalten, um sicherzustellen, dass das Objekt der abgeleiteten Klasse ordnungsgemäß zerstört wird. Wann immer eine virtuelle Klasse verwendet wird, sollte sofort ein virtueller Destruktor hinzugefügt werden, um zukünftige unerwartete Ergebnisse zu vermeiden.

Vorteile von Destructor in C ++

  • Es bietet die letzte Möglichkeit, die nicht verwendeten Ressourcen zu bereinigen, um den von nicht verwendeten Objekten belegten Speicher freizugeben, z. B. das Löschen dynamischer Objekte, das Schließen der System-Handles und der verwendeten Dateien.
  • Aufgrund der großen Menge an Ressourcen, die Speicherplatz belegen und im Computer nicht verwendet werden, verfügt Destructor immer über ein gutes Image, um das Risiko eines Speicherverlusts zu verringern, indem nicht verwendete Objekte zerstört werden.
  • Zwar verfügt C ++ über den Mechanismus der Garbage Collection, der automatische Aufruf des Destruktors, unabhängig davon, ob der Programmierer ihn aufruft oder nicht, um Speicherplatz freizugeben, verhindert jedoch, dass der Benutzer in Zukunft viele schlimmste Situationen erleidet.

Punkte zum Zusammenfassen über Destructor

  • Destruktoren werden verwendet, um die nicht verwendeten Ressourcen einer Klasse zu zerstören.
  • Destruktoren haben denselben Namen wie der Klassenname, der mit einem (~) vorangestellt ist.
  • Im Gegensatz zu Konstruktoren kann es keinen Parameter für den Destruktor geben.
  • Es gibt keinen Rückgabetyp des Destruktors.
  • Wenn der Benutzer in einem Programm keinen Destruktor selbst definiert, erstellt der Compiler automatisch einen Destruktor für dieses Programm.
  • In einer Klasse kann es nicht mehr als einen Destruktor geben.

Fazit

Die obige Beschreibung von Destruktoren definiert klar die Verwendung und Implementierung von Destruktoren in C ++ - Programmen. Obwohl das Konzept des Destruktors nicht komplex ist, ist es sehr wichtig, vor der Implementierung im Programm zu verstehen, dass eine unsachgemäße Verwendung des Destruktors zu unerwarteten Ergebnissen führen kann.

Empfohlener Artikel

Dies ist eine Anleitung zu Destructor in C ++. Hier diskutieren wir die Einführung in Destructor in C ++ und das Arbeiten mit Destructor zusammen mit den Vorteilen. Sie können auch unsere anderen Artikelvorschläge durchgehen, um mehr zu erfahren.

  1. Destruktor in Java (Beispiele)
  2. Einführung in das Überschreiben in C ++
  3. Muster in C ++ (Beispiele)
  4. Arten von Konstruktoren in C ++
  5. Destruktor in Python (Syntax, Beispiele)