Namensräume
Varianten
Aktionen

std::experimental::unique_resource

Von cppreference.com
 
 
 
 
 
Definiert in Header <experimental/scope>
template< class R, class D >
class unique_resource;
(library fundamentals TS v3)

unique_resource ist ein universeller RAII-Wrapper für Ressourcen-Handles, der eine Ressource über ein Handle besitzt und verwaltet und diese Ressource verwirft, wenn das unique_resource zerstört wird.

Die Ressource wird mit dem Deleter vom Typ D verworfen, wenn eines der folgenden Ereignisse eintritt:

  • Das verwaltende unique_resource-Objekt wird zerstört.
  • Das verwaltende unique_resource-Objekt wird über operator= oder reset() von einer anderen Ressource zugewiesen.

Sei RS vom Typ R, wenn R ein Objekttyp ist, oder andernfalls std::reference_wrapper<std::remove_reference_t<R>>.

  • unique_resource enthält effektiv ein Unterobjekt vom Typ RS, das das Ressourcen-Handle ist oder dieses umschließt, einen Deleter vom Typ D und ein bool-Flag, das angibt, ob der Wrapper die Ressource besitzt.
  • Zu Erklärungszwecken wird das Unterobjekt vom Typ RS als gespeichertes Ressourcen-Handle bezeichnet, und das gespeicherte (wenn R ein Objekttyp ist) oder umschlossene (wenn R ein Referenztyp ist) R wird als zugrundeliegendes Ressourcen-Handle bezeichnet. Diese beiden Begriffe werden von den LFTS nicht verwendet.

Inhalt

[bearbeiten] Template-Parameter

R - Typ des Ressourcen-Handles
D - Typ des Deleters
Typanforderungen
-
R muss ein Objekttyp oder eine lvalue-Referenz auf einen Objekttyp sein. Sei UnrefR std::remove_reference_t<R>, UnrefR muss MoveConstructible sein, und wenn UnrefR nicht CopyConstructible ist, muss std::is_nothrow_move_constructible_v<UnrefR> true sein.
-
D muss ein Destructible und MoveConstructible FunctionObject-Typ sein, und wenn D nicht CopyConstructible ist, muss std::is_nothrow_move_constructible_v<D> true sein. Bei einem lvalue d vom Typ D und einem lvalue r vom Typ UnrefR muss der Ausdruck d(r) wohlgeformt sein.

[bearbeiten] Member-Funktionen

konstruiert eine neue unique_resource
(public member function) [bearbeiten]
verwaltet die verwaltete Ressource, falls vorhanden
(public member function) [bearbeiten]
weist eine unique_resource zu
(public member function) [bearbeiten]
Modifizierer
gibt den Besitz frei
(public member function) [bearbeiten]
verwaltet oder ersetzt die verwaltete Ressource
(public member function) [bearbeiten]
Observer
greift auf das zugrundeliegende Ressourcen-Handle zu
(public member function) [bearbeiten]
greift auf den Deleter zu, der zum Verwerfen der verwalteten Ressource verwendet wird
(public member function) [bearbeiten]
greift auf das Dereferenziierte zu, wenn das Ressourcen-Handle ein Zeiger ist
(public member function) [bearbeiten]

[bearbeiten] Nicht-Member-Funktionen

erstellt eine unique_resource und prüft auf ungültige Werte
(function template) [bearbeiten]

[bearbeiten] Deduktionshilfen

[bearbeiten] Anmerkungen

Ressourcen-Handle-Typen, die NullablePointer erfüllen, können auch von std::unique_ptr verwaltet werden. Im Gegensatz zu unique_ptr erfordert unique_resource kein NullablePointer.

[bearbeiten] Beispiel

[bearbeiten] Siehe auch

intelligenter Zeiger mit semantisch eindeutigem Objektbesitz
(Klassen-Template) [edit]