Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Erstellen und Verwenden von Weak Pointers | Schwache 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
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.

Aufgabe

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

cpp

solution

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 2
toggle bottom row

book
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.

Aufgabe

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

cpp

solution

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 2
Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
We're sorry to hear that something went wrong. What happened?
some-alt