Empfohlen, 2019

Tipp Der Redaktion

Unterschied zwischen Konstruktor und Destruktor

Manchmal ist es erforderlich, einen Teil eines Objekts zu initialisieren, bevor es verwendet werden kann. Zum Beispiel arbeiten wir auf dem Stapel, bevor wir eine Aktion ausführen, muss der Anfang des Stapels immer auf Null gesetzt werden. Diese Funktion der automatischen Initialisierung wird durch 'Constructor' ausgeführt. Wahrscheinlich, wenn ein Objekt Code ausführen muss, bevor es zerstört wird. Zum Beispiel, wenn ein Objekt eine Datei schließen muss, die es geöffnet hat, bevor es zerstört wird. Es kann mit Hilfe von 'Destructor' ausgeführt werden.

Lassen Sie uns einige grundlegende Unterschiede zwischen Konstruktor und Destruktor anhand einer Vergleichstabelle darstellen

Vergleichstabelle:

Basis zum VergleichKonstrukteurZerstörer
Zweck
Es ordnet den Speicher einem Objekt zu.Es hebt die Erinnerung an ein Objekt auf.
ErklärungKlassenname (Argumente falls vorhanden) {};~ Klassenname (keine Argumente) {};
ArgumenteKonstruktor akzeptiert ArgumenteDestructor akzeptiert keine Argumente.
BerufungDer Konstruktor wird automatisch aufgerufen, während das Objekt erstellt wird.Der Destruktor wird automatisch aufgerufen, wenn der Block beendet wird oder das Programm beendet wird.
ArbeitenDer Konstruktor erlaubt dem Objekt, einen Teil seines Wertes vor seiner Verwendung zu initialisieren.Mit Destructor kann ein Objekt zum Zeitpunkt seiner Zerstörung Code ausführen.
Reihenfolge der Ausführung
Konstruktor wird in aufeinanderfolgender Reihenfolge aufgerufen.
Destruktor wird in umgekehrter Reihenfolge des Konstruktors aufgerufen.
In ZahlenDie Klasse kann mehrere Konstruktoren enthalten.Es gibt jedoch immer einen einzigen Destruktor in der Klasse.
Konstruktor kopierenMit dem Copy-Konstruktor kann ein Konstruktor ein Objekt von einem anderen Objekt aus deklarieren und initialisieren.Kein solches Konzept.
ÜberladenKonstruktoren können überladen werden.Destruktor kann nicht überladen werden.

Definition des Konstruktors:

Ein Konstruktor ist im Grunde eine Memberfunktion von class, die das Objekt initialisiert und ihm Speicherplatz zuweist. Konstruktoren können leicht identifiziert werden, da sie deklariert und mit demselben Namen wie die Klasse definiert werden. Ein Konstruktor hat keinen Rückgabetyp. Sie geben also nichts zurück, auch nicht "leer". Ein Konstruktor ist immer im öffentlichen Abschnitt einer Klasse definiert.

Eine Klasse kann mehrere Konstruktoren enthalten. Sie können anhand der Anzahl und des Typs der übergebenen Argumente unterschieden werden. Wenn in einer Klasse mehrere Konstruktoren vorhanden sind; impliziter Konstruktor (do-nothing-Konstruktor) muss zusammen mit ihnen definiert werden; es tut aber nichts, befriedigt den Compiler.

Konstruktoren können auch mit den Standardargumenten definiert werden. Dabei initialisieren sie das Objekt auch „dynamisch“. Konstruktoren können weder vererbt noch virtuell sein, sie können jedoch überladen werden. Sie können nicht auf ihre Adresse verwiesen werden.

Implementierung des Konstruktors:

 Klasse Const {int a, b; public: Const () {// Konstruktor ohne Parameter a = 0; b = 0; } Const (int c, int d) {// Konstruktor mit Parameter a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // Diese Anweisung ruft den Konstruktor auf.} 

Wenn C1 erstellt wird, wird ein Konstruktor ohne Parameter ausgeführt, da C1 keinen Parameter übergibt. Beim Erstellen von C2 wird dagegen ein Konstruktor mit einem Parameter ausgeführt, da er zwei Ganzzahlen an den Konstruktor übergibt.

Definition des Destruktors:

Ein Destruktor ist auch eine Memberfunktion einer Klasse, die den einem Objekt zugewiesenen Speicher freigibt. Es wird mit demselben Namen wie der einer Klasse definiert, dem ein Tilde-Symbol (~) vorangestellt ist. Destruktoren werden immer in umgekehrter Reihenfolge der Konstruktoren aufgerufen.

Es gibt immer einen einzelnen Destruktor in einer Klasse, da er keine Argumente akzeptiert. Lokale Objekte werden zerstört, sobald die Kontrolle der Ausführung den Block verlässt. Andererseits werden globale Objekte zerstört, wenn das gesamte Programm beendet wird. Ein Destruktor wird implizit von einem Compiler aufgerufen. Wenn die Klassen vererbt werden und eine Klasse von der übergeordneten Klasse abgeleitet wird und sowohl die untergeordnete Klasse als auch eine übergeordnete Klasse über Destruktoren verfügen; Dann wird zuerst der Destruktor der abgeleiteten Klasse aufgerufen, gefolgt vom Destruktor der übergeordneten Klasse.

Implementierung von Destructor:

 Klasse Const {int a, b; public: Const (int c, int d) {// Konstruktor mit Parameter. a = c; c = d; cout << "Wert von a und b sind" < 

Wenn ein C1-Objekt erstellt wird, wird ein Konstruktor mit zwei ganzzahligen Parametern aufgerufen, und das Member "a, b" wird initialisiert und der Wert von "a, b" wird gedruckt. Nachdem dieser Destruktor aufgerufen wurde, wird die Nachricht "Objekt C1 wird zerstört" aufgerufen und ausgegeben.

Hauptunterschied zwischen Konstruktoren und Destruktoren

  1. Der Hauptzweck eines Konstruktors besteht darin, den Objekten Speicher zuzuweisen, wenn sie erstellt werden, während der Hauptzweck eines Destruktors darin besteht, den Speicher des Objekts aufzuheben, wenn es zerstört wird.
  2. Ein Konstruktor darf die Argumente akzeptieren, da die Argumente zur Initialisierung der Datenmember der Klasse verwendet werden können. Ein Destruktor akzeptiert keine Argumente, da die einzige Aufgabe darin besteht, den Speicher des Objekts aufzuheben.
  3. Ein Konstruktor wird aufgerufen, wenn ein Objekt erstellt wird. Andererseits wird ein Destruktor aufgerufen, wenn ein Programm beendet wird oder das Programm den Block verlässt, in dem das Objekt erstellt wird.
  4. Ein Konstruktor wird im Allgemeinen zum Initialisieren der Datenmember der Klasse verwendet, wohingegen ein Destruktor verwendet wird, damit das Objekt eine Aktion ausführen kann, bevor es zerstört wird.
  5. Konstruktoren werden in aufeinanderfolgender Reihenfolge ausgeführt. Das heißt, wenn eine abgeleitete Klasse die Basisklasse erbt und das Objekt der abgeleiteten Klasse erstellt wird, ruft sie zuerst den Konstruktor der Basisklasse und dann den Konstruktor der abgeleiteten Klasse auf. Auf der anderen Seite wird der Destruktor der abgeleiteten Klasse zuerst aufgerufen, und dann bedeutet die Basisklasse, dass ein Destruktor in umgekehrter Reihenfolge des Konstruktors ausgeführt wird.
  6. In der Klasse können mehrere Konstruktoren vorhanden sein, die anhand der übergebenen Argumente angegeben werden. Im Unterricht gibt es nur einen Destruktor.
  7. Es gibt ein Konzept des Kopierkonstruktors, mit dem ein Objekt von einem anderen Objekt initialisiert werden kann, während der Destruktor kein solches Konzept hat.
  8. Konstruktoren können überladen werden, um unter dem Namen desselben Konstruktors unterschiedliche Aktionen auszuführen, während Destruktoren nicht überladen werden können.

Fazit:

Abgesehen von der Ähnlichkeit, dass Konstruktor und Destruktor die besondere Memberfunktion einer Klasse sind und denselben Namen haben, besteht der grundlegende Unterschied zwischen beiden darin, dass "Konstruktor" zum Zeitpunkt der Speicherzuweisung und "Destruktor" am aufgerufen wird Zeitpunkt der Speicherfreigabe von Objekten. Konstruktor und Destruktor werden vom Compiler implizit aufgerufen, auch wenn sie nicht in der Klasse definiert sind.

Top