Heben Sie die Zuweisung eines std::vector-Objekts in C++ auf

Hafiz Muhammad Zohaib 12 Oktober 2023
Heben Sie die Zuweisung eines std::vector-Objekts in C++ auf

Dieser Artikel erklärt, wie wir die std::vector-Objekte in C++/C freigeben können. Zuerst werden wir die selbstcodierten Möglichkeiten der Freigabe sehen und danach untersuchen, wie die std::vector-Objekte in C++ dynamisch freigegeben werden.

Objekte in C++ freigeben

Wenn ein Klassenobjekt in C++ erstellt wird, wird automatisch die spezielle Elementfunktion namens Konstruktor aufgerufen, die das Objekt mit einigen Standardwerten initialisiert. In ähnlicher Weise wird automatisch eine spezielle Elementfunktion Destruktor aufgerufen, wenn das erstellte Objekt den Gültigkeitsbereich verlässt.

Diese Destruktor-Funktion gibt den gesamten vom erstellten Objekt belegten Speicher frei. Dieser Vorgang des Freigebens des vom Objekt belegten Speichers wird als Freigabe bezeichnet.

das std::vector-Objekt

In C++ ist std ein Namensraum und der Operator :: ein Bereichsoperator. Dieser Bereichsoperator teilt dem Compiler mit, in welcher Klasse/Namespace er nach dem Bezeichner/der Klasse suchen soll.

Wenn der Ausdruck wie std::cout ist, bedeutet dies, dass nach der Kennung cout im Namensraum std gesucht wird. Ähnlich bedeutet std::vector, dass man im Namensraum std nach einer Vektorklasse sucht.

Für die Freigabe müssen wir zuerst ein Objekt der Klasse Vektor erstellen. Dafür können wir den folgenden Code mit dem GCC-Compiler C++11 verwenden:

#include <iostream>
#include <vector>

int main() {
  // Create a vector containing integers
  std::vector<int> v = {7, 5, 16, 8};
}

Der Namensraum std enthält mehrere C++-Bibliotheken im obigen Code. Wir haben zuerst explizit die Bibliothek vector hinzugefügt und damit den Vektor mit dem Typ std::vector<int> initialisiert.

Selbstcodierte Möglichkeiten der Vektorzuordnung in C++

Im folgenden Code haben wir explizit die Befehle zum Löschen des Vektors geschrieben. Dies gilt nur, wenn Sie zum Erstellen der Vektoren das Schlüsselwort new verwenden.

Der new-Operator signalisiert eine Anfrage zur Speicherzuweisung auf dem Free Store. Ein new-Operator weist den Speicher zu, wenn genügend Platz vorhanden ist, initialisiert ihn und gibt dann den Ort des neu erstellten und initialisierten Speichers an die Zeigervariable weiter.

Im folgenden Code haben wir zuerst den Vektorzeiger initialisiert und dann überprüft, ob er NULL war oder nicht. Nachdem wir unsere erforderliche Berechnung durchgeführt hatten, stellten wir durch die assert-Anweisung sicher, dass der Vektorzeiger nicht leer ist.

Dann haben wir den Vektor und seinen belegten Platz mit der Anweisung delete entfernt.

#include <cassert>
#include <iostream>
#include <vector>
using namespace std;

int main() {
  std::vector<int>* vec = new std::vector<int>;
  \\*** assert(vec != NULL);
  delete vec;
  return 0;
}

Mit dem folgenden Code haben wir den zugewiesenen Speicher durch vec frei gemacht, indem wir nach den erforderlichen Berechnungen einen leeren Vektor zugewiesen haben. Der Befehl std::vector<int>() erzeugt einen leeren Vektor mit null Bytes.

Die letzte Anweisung prüft den belegten Speicher durch vec in Bytes.

std::vector<int> vec;
\\***
\\*** vec = std::vector<int>();
std::cout << sizeof(decltype(vec.back())) * vec.capacity() << std::endl;

Dynamische Wege der Vektorfreigabe in C++

Wenn Sie in C++ ein std::vector-Objekt innerhalb einer Funktion definieren (d. h. innerhalb von {....}), wird automatisch der Vektorklassenkonstruktor aufgerufen, der das Vektorobjekt initialisiert. Wenn die Ausführung der Funktion endet (d. h. die schließende Klammer } erreicht), wird der Destruktor automatisch aufgerufen.

Zum Beispiel,

void Foo() {
  std::vector<int> v;
  ...
}

C++ garantiert, dass der Destruktor von v aufgerufen wird, wenn die Methode ausgeführt wird. Der Destruktor von std::vector stellt sicher, dass der zugewiesene Speicher freigegeben wird.

Verwandter Artikel - C++ Vector