Vektordestruktor in C++

Naila Saad Siddiqui 12 Oktober 2023
  1. Destruktoren in C++
  2. Destruktoren von Vektoren und Strings in C++
Vektordestruktor in C++

Dieser Artikel behandelt Destruktoren und ihre Verwendung beim Erstellen von Vektoren und Zeichenfolgen in C++.

Destruktoren in C++

Im OOP-Paradigma ist ein Destruktor eine Member-Funktion, die jeder Klasse zugeordnet ist und automatisch ausgeführt wird, wenn ein Objekt der Klasse gelöscht wird oder seine Lebensdauer endet. Darüber hinaus werden Destruktoren für alle Variablen aufgerufen, die im Heap-Speicher erstellt wurden.

Wenn solche Variablen gelöscht werden, wird der Destruktor aufgerufen, damit der Speicher für eine spätere Verwendung freigegeben wird.

Destruktoren werden mit demselben Namen wie der Name der Klasse mit einem gekachelten Symbolpräfix (~) erstellt. In einer Klasse wird jedes Objekt, das mit einem Konstruktor erstellt wurde, mit einem Destruktor gelöscht, jedoch in umgekehrter Reihenfolge ihrer Erstellung.

Die Syntax für den Destruktor lautet:

~<className>() {
  // coding
}

Betrachten wir eine Beispielklasse.

#include <iostream>
using namespace std;

class DestructorExample {
 public:
  DestructorExample() { cout << "In Constructor of DestructorExample" << endl; }

  ~DestructorExample() { cout << "In Destructor of DestructorExample"; }
};
int main() {
  DestructorExample t;
  return 0;
}

Dies ergibt die folgende Ausgabe.

In Constructor of DestructorExample
In Destructor of DestructorExample

Destruktoren von Vektoren und Strings in C++

Wenn Sie std::vector und std::string verwenden, wird der Destruktor automatisch aufgerufen, wenn ihre Objekte außerhalb des Gültigkeitsbereichs liegen. Diese Klassen haben ihre Destruktoren implementiert, die automatisch ausgelöst werden, wenn ihre entsprechenden Objekte gelöscht werden müssen.

Sie müssen sie also nicht aufrufen oder explizit implementieren.

Wenn Sie jedoch einen Zeigervektor auf eine Klasse haben, müssen diese Objekte explizit wie folgt gelöscht werden:

#include <iostream>
#include <vector>

using namespace std;

class MyClass {
 public:
  MyClass() { cout << "Object Created" << endl; }

  ~MyClass() { cout << "Object Destroyed" << endl; }
};

int main() {
  vector<MyClass*> testVec;
  // Creating the objects
  MyClass* p = NULL;
  for (int i = 0; i < 3; i++) {
    p = new MyClass();
    testVec.push_back(p);
  }
  // Destroying the objects
  for (auto p : testVec) {
    delete p;
  }
  testVec.clear();

  return 0;
}

Ausgang:

Object Created
Object Created
Object Created
Object Destroyed
Object Destroyed
Object Destroyed

Wir iterieren über den Vektor und löschen jedes Objekt explizit. Der Speicher in einem Heap wurde freigegeben; Daher können wir die Methode .clear() verwenden, um alle Elemente des Vektors zu entfernen.

Nun sollten MyClass*-Objekte explizit gelöscht werden; der Vektor wird diese Objekte nicht löschen. Daher können Sie sagen, dass wenn einfache Klassenobjekte in Vektoren vorhanden sind, diese Objekte automatisch gelöscht werden.

Aber wenn Sie einen Zeiger haben, muss dieser explizit gelöscht werden.

Verwandter Artikel - C++ Destructor