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 hlt, welches durch einen std::shared_ptr verwaltet wird.
Er muss in einen std::shared_ptr umgewandelt werden, um auf das referenzierte Objekt zugreifen zu knnen.
std::weak_ptr bildet eine temporre Eigentmerschaft ab. Diese Eigentmerschaft erstreckt sich nur die Zeit des Zugriffs, falls das Objekt dann noch existiert. Auerhalb dieser Zeit, kann das Objekt jederzeit von jemand anderes zerstrt werden. std::weak_ptr wird verwendet, um die Zugriffsmglichkeit auf das Objekt zu speichern. Er mu in einen std::shared_ptr umgewandelt werden, um das Objekt vorbergehend in Besitz zunehmen. Falls whrend dieser Zeit, der ursprngliche std::shared_ptr zerstrt wird, so wird die Lebensdauer des verwalteten Objekten bis zur Zerstrung des temporren std::shared_ptrs verlngert.
Zustzlich kann std::weak_ptr dazu verwendet werden, Kreisabhngigkeiten zwischen std::shared_ptrs aufzubrechen.
Klassentypen
| Typ | Definition |
element_type
|
T
|
Methoden
erzeugt einen neuen weak_ptr (ffentliche Elementfunktion) | |
zerstrt einen weak_ptr (ffentliche Elementfunktion) | |
weist einen weak_ptr zu (ffentliche Elementfunktion) | |
modifizierend | |
lst die Eigentumsverbindung zwischen weak_ptr und dem zuverwaltenden Objekts (ffentliche Elementfunktion) | |
| vertauscht die verwalteten Objekte (ffentliche Elementfunktion) | |
informierend | |
gibt die Anzahl der shared_ptrs, die das selbe Objekte verwalten (ffentliche Elementfunktion) | |
| prft, ob das referenzierte Objekt bereits gelscht 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) | |
Assoziierte Funktionen
(C++11) |
Spezialisierung des std::swap-Algorithmus fr schwache Zeiger (Funktions-Template) |
Beispiele
Veranschaulicht, wie lock() verwendet werden mu, um die Gltigkeit des Zeigers zu gewhrleisten.
#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