namespace cpp {}

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


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

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


kennen:lib:unique_ptr [2017-03-24 09:29] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== unique_ptr<T, Deleter> ======
 +''#include'' [[..:include:memory]]
  
 +Intelligenter Zeiger mit Verschiebesemantik.
 +
 +===== Methoden =====
 +| ''get()'' | Liefert Zeiger auf verwaltetes Objekt |
 +|''release()''| Gibt verwaltetes Objekt frei |
 +|''reset(T* p)''| Gibt verwaltetes Objekt frei und übernimmt Besitz von ''p'' |
 +
 +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 =====
 + [[.:shared_ptr|shared_ptr<T>]].
 +
 +===== Beispiel =====
 +<code cpp unique_ptr.cpp>
 +#include <memory>
 +#include <iostream>
 +
 +std::unique_ptr<double> source(double d)
 +{
 +  return std::make_unique<double>(d); 
 +}
 +
 +void sink(std::unique_ptr<double> p)
 +{
 +  std::cout << *p << " erhalten.\n";
 +}
 +
 +int main()
 +{
 +  auto p(source(3.1415));
 +
 +  std::cout << *p << " erschaffen\n";
 +  sink(std::move(p));
 +  if (!p) std::cout << "Zeiger freigegeben\n";
 +
 +  sink(source(2.718));
 +
 +  // dynamisches Feld - bevorzuge std::vector<T>, std::array<T,N>
 +
 +  int size = 10;
 +  std::unique_ptr<int[]> squares(new int[size]);
 +
 +  for (int i = 0; i < size; ++i) // Buchhaltung über Anzahl Elemente 
 +  {                               // in Verantwortung des Programmierers! 
 +    squares[i] = i*i;
 +    std::cout << squares[i] << ' ';
 +  }
 +  return 0; // automatische Freigabe
 +}
 +</code>
 +
 +Die Funktion ''make_unique<T>(parameter)'' als Gegenstück zu ''make_shared<T>(parameter)'' wurde erst im Standard C++14 ergänzt.
 +In C++11 lässt sie sich aber leicht ergänzen:
 +
 +<code cpp make_unique.cpp>
 +#include <memory>
 +#include <iostream>
 +
 +template <class T, class... Args>
 +std::unique_ptr<T> make_unique(Args&&... args)
 +{
 +  return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
 +}
 +
 +int main()
 +{
 +  auto p = make_unique<double>(3.1415);
 +
 +  std::cout << *p << " erschaffen\n";
 +  return 0;
 +}
 +
 +</code>
kennen/lib/unique_ptr.txt · Zuletzt geändert: 2017-03-24 09:29 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki