Namespaces
Variants

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

From cppreference.net
unique_resource ( ) ;
(1) (bibliothèque fundamentals TS v3)
template < class RR, class DD >
unique_resource ( RR && r, DD && d ) noexcept ( /*voir ci-dessous*/ )
(2) (bibliothèque fundamentals TS v3)
unique_resource ( unique_resource && other ) ;
(3) (bibliothèque fundamentals TS v3)

Les éléments suivants sont utilisés à des fins explicatives :

  • RS est le type du gestionnaire de ressource stocké.
  • L'expression res_ fait référence au gestionnaire de ressource sous-jacent.
  • del_ fait référence à l'objet suppresseur.
1) Constructeur par défaut. Initialise par valeur le gestionnaire de ressource stocké et le suppresseur. Le unique_resource construit ne possède pas la ressource.
Cette surcharge participe à la résolution de surcharge seulement si std:: is_default_constructible_v < R > et std:: is_default_constructible_v < D > sont true .
2) Le gestionnaire de ressource stocké est initialisé avec std:: forward < RR > ( r ) si std:: is_nothrow_constructible_v < RS, RR > est true , sinon avec r . Si l'initialisation du gestionnaire de ressource stocké lève une exception, appelle d ( r ) .
Ensuite, le suppresseur est initialisé avec std:: forward < DD > ( d ) si std:: is_nothrow_constructible_v < D, DD > est true , sinon avec d . Si l'initialisation du suppresseur lève une exception, appelle d ( res_ ) .
Le unique_resource construit possède la ressource.
Cette surcharge participe à la résolution de surcharge seulement si tous les 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 & > et std:: is_nothrow_constructible_v < D, DD > || std:: is_constructible_v < D, DD & > sont true .
Le programme est mal formé si l'une des expressions d ( r ) , d ( res_ ) et del_ ( res_ ) est mal formée.
Le comportement est indéfini si l'une des expressions d ( r ) , d ( res_ ) et del_ ( res_ ) entraîne un comportement indéfini ou lève une exception.
3) Constructeur de déplacement. Le gestionnaire de ressource stocké est initialisé à partir de celui de other , en utilisant std::move si std:: is_nothrow_move_constructible_v < RS > est true . Si l'initialisation du gestionnaire de ressource stocké lève une exception, other n'est pas modifié.
Ensuite, le suppresseur est initialisé avec celui de other , en utilisant std::move si std:: is_nothrow_move_constructible_v < D > est true . Si l'initialisation du suppresseur lève une exception et std:: is_nothrow_move_constructible_v < RS > est true et other possède la ressource, appelle le suppresseur de other avec res_ pour libérer la ressource, puis appelle other. release ( ) .
Après la construction, le unique_resource construit possède sa ressource si et seulement si other possédait la ressource avant la construction, et other est défini pour ne pas posséder la ressource.

Table des matières

Paramètres

r - un descripteur de ressource
d - un suppresseur à utiliser pour libérer la ressource
other - un autre unique_resource dont acquérir la propriété

Exceptions

Toute exception levée lors de l'initialisation du gestionnaire de ressource stocké ou du suppresseur.

Notes

Le mécanisme de ces constructeurs garantit l'absence de fuite de ressources.

Exemple

Voir aussi

construit un nouveau unique_ptr
(fonction membre publique de std::unique_ptr<T,Deleter> )