std::experimental::unique_resource
Von cppreference.com
< cpp | experimental
| 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_resourceenthält effektiv ein Unterobjekt vom TypRS, das das Ressourcen-Handle ist oder dieses umschließt, einen Deleter vom TypDund ein bool-Flag, das angibt, ob der Wrapper die Ressource besitzt. - Zu Erklärungszwecken wird das Unterobjekt vom Typ
RSals gespeichertes Ressourcen-Handle bezeichnet, und das gespeicherte (wennRein Objekttyp ist) oder umschlossene (wennRein Referenztyp ist)Rwird 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) | |
| verwaltet die verwaltete Ressource, falls vorhanden (public member function) | |
weist eine unique_resource zu(public member function) | |
Modifizierer | |
| gibt den Besitz frei (public member function) | |
| verwaltet oder ersetzt die verwaltete Ressource (public member function) | |
Observer | |
| greift auf das zugrundeliegende Ressourcen-Handle zu (public member function) | |
| greift auf den Deleter zu, der zum Verwerfen der verwalteten Ressource verwendet wird (public member function) | |
| greift auf das Dereferenziierte zu, wenn das Ressourcen-Handle ein Zeiger ist (public member function) | |
[bearbeiten] Nicht-Member-Funktionen
erstellt eine unique_resource und prüft auf ungültige Werte(function template) |
[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
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
| (C++11) |
intelligenter Zeiger mit semantisch eindeutigem Objektbesitz (Klassen-Template) |