namespace cpp {}

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:lib:shared_ptr
no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


kennen:lib:shared_ptr [2016-11-19 18:45] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
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 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki