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.
creating_weak_pointer.h
12std::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.
converting.h
12345auto 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.
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
solution.cpp
Danke für Ihr Feedback!
single
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 5.56
Erstellen und Verwenden von Weak Pointers
Swipe um das Menü anzuzeigen
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.
creating_weak_pointer.h
12std::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.
converting.h
12345auto 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.
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
solution.cpp
Danke für Ihr Feedback!
Awesome!
Completion rate improved to 5.56single