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!
single