Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Funktionsweise eines Einzigartigen Pointers | Einzigartige Zeiger
C++ Smart Pointers
course content

Kursinhalt

C++ Smart Pointers

C++ Smart Pointers

1. Einführung in Smart Pointer
2. Einzigartige Zeiger
3. Gemeinsame Zeiger
4. Schwache Zeiger
5. Referenzen
6. Fortgeschrittene Themen

book
Funktionsweise eines Einzigartigen Pointers

Wenn Sie einen neuen Unique Pointer erstellen, wird Speicher für die Ressource auf dem Heap reserviert. Der Heap ist ein Teil des Speichers des Programms, der für die dynamische Speicherzuweisung reserviert ist.

Wenn der Unique Pointer außer Gültigkeitsbereich gerät (z.B. wenn eine Funktion endet oder ein Block endet), wird der Destruktor der verwiesenen Ressource aufgerufen. Dieser Destruktor löscht die Ressource und gibt den zugehörigen Speicher frei. Dieser Prozess erfolgt automatisch, selbst im Falle von Ausnahmen, was Unique Pointer außergewöhnlich sicher und zuverlässig macht.

Zu merkende Funktionen des Unique Pointers

Abgesehen von den Funktionen, die wir in den vorherigen Abschnitten besprochen haben, sind hier einige andere wesentliche Funktionen des Unique Pointers, die Sie kennen sollten:

reset

Diese Funktion kann verwendet werden, um einen Unique Pointer auf eine neue Ressource zeigen zu lassen oder um die aktuelle Ressource freizugeben, ohne sie zu zerstören.

In der obigen Codezeile rufen wir reset() ohne Parameter auf, was den Unique Pointer auf null setzt und die zugehörige Ressource löscht.

Hier übergeben wir ein Argument an die reset() Funktion. Dieser Code ersetzt das alte verwiesene Objekt durch ein neues Objekt.

release

Die release Funktion wird verwendet, um das Eigentum an der Ressource vom Unique Pointer freizugeben, ohne die Ressource zu zerstören.

Im obigen Code verwenden wir den release() Aufruf, um das Eigentum an dem Objekt von ptr zu übernehmen und es an ptr2 zu übertragen. Nach Ausführung dieser Zeile wird ptr null sein.

Es ist wichtig zu beachten, dass release() nicht den Destruktor für die verwiesene Ressource aufruft. Betrachten Sie den folgenden Code:

cpp

releaseBadExample

copy
12
std::unique_ptr<int> intPtr = std::make_unique<int>(42); intPtr.release(); //memory leak introduced here, dont do this.

Hinweis

Der obige Code führt zu einem Speicherleck, da wir release() aufgerufen haben, aber den zurückgegebenen Wert keiner Variablen zugewiesen haben.

operator* und operator->

Diese Operatoren ermöglichen es Ihnen, auf die Ressource zuzugreifen, als ob Sie direkt damit arbeiten würden. Sie bieten eine natürliche und intuitive Möglichkeit, mit dem verwalteten Objekt zu interagieren.

Was macht die reset()-Funktion, wenn sie ohne Parameter aufgerufen wird?

Was macht die reset()-Funktion, wenn sie ohne Parameter aufgerufen wird?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 5
We're sorry to hear that something went wrong. What happened?
some-alt