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 Pointers
2. Einzigartige Zeiger
3. Gemeinsame Zeiger
4. Schwache Zeiger
5. Fortgeschrittene Themen

book
Erstellen und Verwenden von Weak Pointers

Erstellen von Weak Pointern

Sie sollten typischerweise einen std::weak_ptr aus einem bestehenden std::shared_ptr erstellen. Dies stellt sicher, dass der Weak Pointer ein Objekt beobachtet, das bereits von mindestens einem Shared Pointer verwaltet wird.

h

creating_weak_pointer

copy
12
std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr);

Der std::weak_ptr p_weak wird aus einem bestehenden std::shared_ptr p_shared konstruiert. Das bedeutet, dass p_weak den Referenzzähler von p_shared nicht erhöht, sondern stattdessen dasselbe verwaltete Objekt beobachtet. Die Gültigkeit von p_weak hängt von p_shared ab; wenn alle std::shared_ptr-Instanzen, die das Objekt verwalten, zerstört werden, läuft p_weak ab und kann nicht mehr verwendet werden, um direkt auf das Objekt zuzugreifen.

Verwendung von Weak Pointers

Um auf ein Objekt zuzugreifen, das von einem std::weak_ptr verwaltet wird, müssen Sie es zuerst mit std::shared_ptr in einen lock() umwandeln. Diese Methode überprüft, ob das Objekt noch existiert, und gibt einen std::shared_ptr darauf zurück, andernfalls gibt sie einen leeren std::shared_ptr zurück.

Das Sperren eines Weak Pointers verhindert, dass das Objekt während der Nutzung zerstört wird. Da std::weak_ptr nicht zur Referenzzählung beiträgt, würde der direkte Zugriff auf das Objekt das Risiko bergen, eine zerstörte Instanz zu verwenden. Die Umwandlung in einen std::shared_ptr erhöht die Referenzzählung und stellt sicher, dass das Objekt während der Nutzung gültig bleibt.

h

converting

copy
12345
auto locked_shared = p_weak.lock(); if (locked_shared) // The object is alive, and you can use lockedSharedPtr to access it. else // The object has been deallocated, and lockedSharedPtr is empty.
Aufgabe

Swipe to start coding

Vervollständigen Sie den folgenden Code, um einen std::weak_ptr aus einem std::shared_ptr zu erstellen, ihn zurück in einen std::shared_ptr zu konvertieren und sicher auf den Wert des verwalteten Objekts zuzugreifen.

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

Erstellen von Weak Pointern

Sie sollten typischerweise einen std::weak_ptr aus einem bestehenden std::shared_ptr erstellen. Dies stellt sicher, dass der Weak Pointer ein Objekt beobachtet, das bereits von mindestens einem Shared Pointer verwaltet wird.

h

creating_weak_pointer

copy
12
std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr);

Der std::weak_ptr p_weak wird aus einem bestehenden std::shared_ptr p_shared konstruiert. Das bedeutet, dass p_weak den Referenzzähler von p_shared nicht erhöht, sondern stattdessen dasselbe verwaltete Objekt beobachtet. Die Gültigkeit von p_weak hängt von p_shared ab; wenn alle std::shared_ptr-Instanzen, die das Objekt verwalten, zerstört werden, läuft p_weak ab und kann nicht mehr verwendet werden, um direkt auf das Objekt zuzugreifen.

Verwendung von Weak Pointers

Um auf ein Objekt zuzugreifen, das von einem std::weak_ptr verwaltet wird, müssen Sie es zuerst mit std::shared_ptr in einen lock() umwandeln. Diese Methode überprüft, ob das Objekt noch existiert, und gibt einen std::shared_ptr darauf zurück, andernfalls gibt sie einen leeren std::shared_ptr zurück.

Das Sperren eines Weak Pointers verhindert, dass das Objekt während der Nutzung zerstört wird. Da std::weak_ptr nicht zur Referenzzählung beiträgt, würde der direkte Zugriff auf das Objekt das Risiko bergen, eine zerstörte Instanz zu verwenden. Die Umwandlung in einen std::shared_ptr erhöht die Referenzzählung und stellt sicher, dass das Objekt während der Nutzung gültig bleibt.

h

converting

copy
12345
auto locked_shared = p_weak.lock(); if (locked_shared) // The object is alive, and you can use lockedSharedPtr to access it. else // The object has been deallocated, and lockedSharedPtr is empty.
Aufgabe

Swipe to start coding

Vervollständigen Sie den folgenden Code, um einen std::weak_ptr aus einem std::shared_ptr zu erstellen, ihn zurück in einen std::shared_ptr zu konvertieren und sicher auf den Wert des verwalteten Objekts zuzugreifen.

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