Namespaces
Variants

std::experimental::unique_resource<R, D>:: unique_resource

From cppreference.net
unique_resource ( ) ;
(1) (Bibliothek Fundamentals TS v3)
template < class RR, class DD >
unique_resource ( RR && r, DD && d ) noexcept ( /*siehe unten*/ )
(2) (Bibliothek Fundamentals TS v3)
unique_resource ( unique_resource && other ) ;
(3) (Bibliothek Fundamentals TS v3)

Folgende Elemente dienen Erklärungszwecken:

  • RS ist der Typ des gespeicherten Ressourcen-Handles.
  • Der Ausdruck res_ verweist auf das zugrundeliegende Ressourcen-Handle.
  • del_ verweist auf das Deleter-Objekt.
1) Standardkonstruktor. Wertinitialisiert den gespeicherten Ressourcen-Handle und den Deleter. Das konstruierte unique_resource besitzt die Ressource nicht.
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn sowohl std:: is_default_constructible_v < R > als auch std:: is_default_constructible_v < D > true sind.
2) Der gespeicherte Ressourcen-Handle wird mit std:: forward < RR > ( r ) initialisiert, falls std:: is_nothrow_constructible_v < RS, RR > true ist, andernfalls mit r . Wenn die Initialisierung des gespeicherten Ressourcen-Handles eine Exception wirft, wird d ( r ) aufgerufen.
Danach wird der Deleter mit std:: forward < DD > ( d ) initialisiert, falls std:: is_nothrow_constructible_v < D, DD > true ist, andernfalls mit d . Wenn die Initialisierung des Deleters eine Exception wirft, wird d ( res_ ) aufgerufen.
Das konstruierte unique_resource besitzt die Ressource.
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn alle von std:: is_constructible_v < RS, RR > , std:: is_constructible_v < D, DD > , std:: is_nothrow_constructible_v < RS, RR > || std:: is_constructible_v < RS, RR & > und std:: is_nothrow_constructible_v < D, DD > || std:: is_constructible_v < D, DD & > den Wert true haben.
Das Programm ist fehlerhaft, wenn einer der Ausdrücke d ( r ) , d ( res_ ) oder del_ ( res_ ) fehlerhaft ist.
Das Verhalten ist undefiniert, wenn einer der Ausdrücke d ( r ) , d ( res_ ) oder del_ ( res_ ) zu undefiniertem Verhalten führt oder eine Exception wirft.
3) Move-Konstruktor. Der gespeicherte Ressourcen-Handle wird mit dem von other initialisiert, unter Verwendung von std::move falls std:: is_nothrow_move_constructible_v < RS > den Wert true hat. Wenn die Initialisierung des gespeicherten Ressourcen-Handles eine Exception wirft, wird other nicht modifiziert.
Danach wird der Deleter mit dem von other initialisiert, unter Verwendung von std::move falls std:: is_nothrow_move_constructible_v < D > den Wert true hat. Wenn die Initialisierung des Deleters eine Exception wirft und std:: is_nothrow_move_constructible_v < RS > den Wert true hat und other die Ressource besitzt, ruft der Deleter von other mit res_ auf, um die Ressource freizugeben, und ruft dann other. release ( ) auf.
Nach der Konstruktion besitzt das konstruierte unique_resource seine Ressource genau dann, wenn other die Ressource vor der Konstruktion besaß, und other wird auf "besitzt die Ressource nicht" gesetzt.

Inhaltsverzeichnis

Parameter

r - ein Ressourcen-Handle
d - ein Deleter zur Freigabe der Ressource
other - ein weiteres unique_resource zur Übernahme des Besitzes

Ausnahmen

Jede Ausnahme, die während der Initialisierung des gespeicherten Ressourcen-Handles oder des Deleter ausgelöst wird.

Hinweise

Der Mechanismus dieser Konstruktoren gewährleistet, dass keine Ressourcen verloren gehen.

Beispiel

Siehe auch

Konstruiert einen neuen unique_ptr
(Öffentliche Mitgliedsfunktion von std::unique_ptr<T,Deleter> )