Kursinhalt
C++ Smart Pointers
C++ Smart Pointers
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:
releaseBadExample
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.
Danke für Ihr Feedback!