Kursinhalt
C++ Smart Pointers
C++ Smart Pointers
Erstellen und Verwenden von Weak Pointers
Die Existenz von schwachen Zeigern ist an geteilte Zeiger gebunden. Typischerweise sollten Sie schwache Zeiger nur verwenden, wenn Sie bereits geteilte Zeiger in Ihrem Code verwenden.
Erstellen von schwachen Zeigern
Wir erstellen normalerweise einen schwachen Zeiger aus einem bestehenden std::shared_ptr
. Dies stellt sicher, dass der schwache Zeiger ein Objekt beobachtet, das bereits von mindestens einem geteilten Zeiger verwaltet wird.
Im obigen Beispiel wird weakPtr
aus sharedPtr
konstruiert. Die Lebensdauer von weakPtr
ist an sharedPtr
gebunden.
Verwendung von schwachen Zeigern
Um das Objekt zu verwenden, auf das ein std::weak_ptr
zeigt, müssen Sie es zuerst mit der Methode std::shared_ptr
in einen lock()
umwandeln. Die Methode lock()
überprüft, ob das Objekt noch existiert und gibt, falls ja, einen std::shared_ptr
darauf zurück. Wenn das Objekt zerstört wurde, gibt es einen leeren std::shared_ptr
zurück.
Das Sperren eines schwachen Zeigers ist notwendig, um sicherzustellen, dass das Objekt nicht zerstört wird, während es verwendet wird. Um es besser zu verstehen, denken Sie darüber nach, was passiert, wenn Sie versuchen, direkt auf das Objekt vom schwachen Zeiger aus zuzugreifen, ohne lock()
aufzurufen.
Da ein schwacher Zeiger die Lebensdauer des Objekts nicht beeinflusst, kann das Objekt zerstört werden, während Sie noch versuchen, es zu verwenden. Indem Sie es in einen Shared Pointer umwandeln, erhöhen Sie die Referenzanzahl und stellen sicher, dass das Objekt nicht stirbt, während Sie es verwenden.
Im obigen Beispiel rufen wir die Funktion lock()
auf einem schwachen Zeiger auf, um ihn in einen temporären gemeinsamen Zeiger umzuwandeln. In der nächsten Zeile, bevor wir eine andere Aktion ausführen, überprüfen wir, ob der gemeinsame Zeiger noch aktiv ist oder nicht.
Swipe to start coding
Vervollständigen Sie den folgenden Code, der einen schwachen Zeiger aus einem gemeinsamen Zeiger erstellt, den schwachen Zeiger in einen gemeinsamen Zeiger umwandelt und dann versucht, sicher auf den Wert des dynamischen Objekts zuzugreifen. Verwenden Sie die Code-Kommentare als Leitfaden.
Lösung
solution
Danke für Ihr Feedback!
Erstellen und Verwenden von Weak Pointers
Die Existenz von schwachen Zeigern ist an geteilte Zeiger gebunden. Typischerweise sollten Sie schwache Zeiger nur verwenden, wenn Sie bereits geteilte Zeiger in Ihrem Code verwenden.
Erstellen von schwachen Zeigern
Wir erstellen normalerweise einen schwachen Zeiger aus einem bestehenden std::shared_ptr
. Dies stellt sicher, dass der schwache Zeiger ein Objekt beobachtet, das bereits von mindestens einem geteilten Zeiger verwaltet wird.
Im obigen Beispiel wird weakPtr
aus sharedPtr
konstruiert. Die Lebensdauer von weakPtr
ist an sharedPtr
gebunden.
Verwendung von schwachen Zeigern
Um das Objekt zu verwenden, auf das ein std::weak_ptr
zeigt, müssen Sie es zuerst mit der Methode std::shared_ptr
in einen lock()
umwandeln. Die Methode lock()
überprüft, ob das Objekt noch existiert und gibt, falls ja, einen std::shared_ptr
darauf zurück. Wenn das Objekt zerstört wurde, gibt es einen leeren std::shared_ptr
zurück.
Das Sperren eines schwachen Zeigers ist notwendig, um sicherzustellen, dass das Objekt nicht zerstört wird, während es verwendet wird. Um es besser zu verstehen, denken Sie darüber nach, was passiert, wenn Sie versuchen, direkt auf das Objekt vom schwachen Zeiger aus zuzugreifen, ohne lock()
aufzurufen.
Da ein schwacher Zeiger die Lebensdauer des Objekts nicht beeinflusst, kann das Objekt zerstört werden, während Sie noch versuchen, es zu verwenden. Indem Sie es in einen Shared Pointer umwandeln, erhöhen Sie die Referenzanzahl und stellen sicher, dass das Objekt nicht stirbt, während Sie es verwenden.
Im obigen Beispiel rufen wir die Funktion lock()
auf einem schwachen Zeiger auf, um ihn in einen temporären gemeinsamen Zeiger umzuwandeln. In der nächsten Zeile, bevor wir eine andere Aktion ausführen, überprüfen wir, ob der gemeinsame Zeiger noch aktiv ist oder nicht.
Swipe to start coding
Vervollständigen Sie den folgenden Code, der einen schwachen Zeiger aus einem gemeinsamen Zeiger erstellt, den schwachen Zeiger in einen gemeinsamen Zeiger umwandelt und dann versucht, sicher auf den Wert des dynamischen Objekts zuzugreifen. Verwenden Sie die Code-Kommentare als Leitfaden.
Lösung
solution
Danke für Ihr Feedback!