namespace cpp

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:lib:shared_ptr

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

kennen:lib:shared_ptr [2016-11-19 18:45] (aktuell)
Zeile 1: Zeile 1:
 +====== shared_ptr<​T>​ ======
 +''#​include''​ [[..:​include:​memory]]
 +
 +Besitzverwaltender,​ referenzzählender intelligenter Zeiger auf dynamisches Objekte mit Basistyp ''​T''​.
 +
 +===== Methoden =====
 +
 +| ''​get()''​ | Liefert Zeiger auf verwaltetes Objekt |
 +|''​release()''​| Gibt verwaltetes Objekt frei |
 +|''​reset(T* p)''​| Gibt verwaltetes Objekt frei und übernimmt Besitz von ''​p''​ |
 +|''​unique()''​| Liefert ''​true'',​ wenn einziger Zeiger auf das verwaltete Objekt |
 +|''​use_oount()''​| Liefert Anzahl der auf das verwaltete Objekt verweisenden ''​shared_ptr<​T>''​ |
 +
 +Die Freigabe der verwalteten Resource erfolgt durch den automatisierten Aufruf des Operators [[../​keywords#​delete]].
 +Als ''​Deleter''​ kann auch ein Funktionsobjekt oder Funktionszeiger angegeben werden.
 +
 +===== Siehe auch =====
 + ​[[.:​unique_ptr|unique_ptr<​T>​]], ​
 + ​[[.:​weak_ptr|weak_ptr<​T>​]].
 +
 +===== Beispiel =====
 +<code cpp shared_ptr.cpp>​
 +#include <​memory>​
 +#include <​iostream>​
 +
 +int main()
 +{
 +  auto p = std::​make_shared<​double>​(3.1415);​
 +  decltype(p) q =  p;
 +  std::​shared_ptr<​double>​ r = q;
 +
 +  std::cout << r.use_count() << " Referenzen\n";​
 +
 +  *p.get() ​ = 42;         // roher Zeiger: &*p
 +  if (q) *q = 2.71828; ​
 +
 +  std::cout << *r << '​\n';​
 +  p = nullptr;
 +  std::cout << *r << '​\n';​
 +  q.reset();
 +
 +  std::cout << *r << '​\n';​
 +  std::cout << "​Einzige Referenz: " << std::​boolalpha << r.unique() << '​\n';​
 +}
 +</​code>​
 +
 +===== "​Schielender"​ Zeiger =====
 +Manchmal benötigt man einen Zeiger auf einen Bestandteil eines dynamisch verwalteten Objekts. Dann kann ein [[https://​www.justsoftwaresolutions.co.uk/​cplusplus/​shared-ptr-secret-constructor.html|aliasing shared_ptr]] benutzt werden. Dieser garantiert, dass das dynamische Objekt "am Leben" bleibt:
 +
 +<code cpp aliasing_shared_ptr.cpp>​
 +#include <​memory>​
 +#include <​iostream>​
 +#include <​utility>​
 +
 +int main()
 +{
 +  auto p  = std::​make_shared<​std::​pair<​int,​int>>​(1,​ 2);
 +  auto py = std::​shared_ptr<​int>​(p,​ &​(p->​second));​
 +  p = nullptr;
 +
 +  std::cout << *py << '​\n';​
 +}
 +</​code>​
 +
  
kennen/lib/shared_ptr.txt · Zuletzt geändert: 2016-11-19 18:45 (Externe Bearbeitung)