std::weak_ptr
definiert in Header <memory>
|
||
template< class T > class weak_ptr; |
(seit C++11) | |
std::weak_ptr
ist ein intelligenter Zeiger, der einen nichtbesitzenden ("schwachen") Verweis auf ein Objekt hält, welches durch einen std::shared_ptr verwaltet wird.
Er muss in einen std::shared_ptr umgewandelt werden, um auf das referenzierte Objekt zugreifen zu können.
std::weak_ptr bildet eine temporäre Eigentümerschaft ab. Diese Eigentümerschaft erstreckt sich nur die Zeit des Zugriffs, falls das Objekt dann noch existiert. Außerhalb dieser Zeit, kann das Objekt jederzeit von jemand anderes zerstört werden. std::weak_ptr wird verwendet, um die Zugriffsmöglichkeit auf das Objekt zu speichern. Er muß in einen std::shared_ptr umgewandelt werden, um das Objekt vorübergehend in Besitz zunehmen. Falls während dieser Zeit, der ursprüngliche std::shared_ptr zerstört wird, so wird die Lebensdauer des verwalteten Objekten bis zur Zerstörung des temporären std::shared_ptrs verlängert.
Zusätzlich kann std::weak_ptr dazu verwendet werden, Kreisabhängigkeiten zwischen std::shared_ptrs aufzubrechen.
Inhaltsverzeichnis |
[Bearbeiten] Klassentypen
Typ | Definition |
element_type | T |
[Bearbeiten] Methoden
erzeugt einen neuen weak_ptr (öffentliche Elementfunktion) | |
zerstört einen weak_ptr (öffentliche Elementfunktion) | |
weist einen weak_ptr zu (öffentliche Elementfunktion) | |
modifizierend | |
löst die Eigentumsverbindung zwischen weak_ptr und dem zuverwaltenden Objekts (öffentliche Elementfunktion) | |
vertauscht die verwalteten Objekte (öffentliche Elementfunktion) | |
informierend | |
gibt die Anzahl der shared_ptr s, die das selbe Objekte verwalten (öffentliche Elementfunktion) | |
prüft, ob das referenzierte Objekt bereits gelöscht wurde (öffentliche Elementfunktion) | |
erzeugt einen shared_ptr , der das referenzierte Objekt verwaltet (öffentliche Elementfunktion) | |
erlaubt Sortierung der weak_ptr basierend auf dem Besitz (öffentliche Elementfunktion) |
[Bearbeiten] Assoziierte Funktionen
(C++11) |
Spezialisierung des std::swap-Algorithmus für schwache Zeiger (Funktions-Template) |
[Bearbeiten] Beispiele
Veranschaulicht, wie lock() verwendet werden muß, um die Gültigkeit des Zeigers zu gewährleisten.
#include <iostream> #include <memory> std::weak_ptr<int> gw; void f() { if (auto spt = gw.lock()) { // Has to be copied into a shared_ptr before usage std::cout << *spt << "\n"; } else { std::cout << "gw is expired\n"; } } int main() { { auto sp = std::make_shared<int>(42); gw = sp; f(); } f(); }
Output:
42 gw is expired