Namespaces
Variants

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

From cppreference.net
unique_resource ( ) ;
(1) (ライブラリファンダメンタルTS v3)
template < class RR, class DD >
unique_resource ( RR && r, DD && d ) noexcept ( /*下記参照*/ )
(2) (ライブラリファンダメンタルTS v3)
unique_resource ( unique_resource && other ) ;
(3) (ライブラリファンダメンタルTS v3)

以下の項目は説明目的で使用されます:

  • RS は格納されたリソースハンドルの型です。
  • res_ は基盤となるリソースハンドルを参照します。
  • del_ はデリーターオブジェクトを参照します。
1) デフォルトコンストラクタ。格納されたリソースハンドルとデリーターを値初期化します。構築された unique_resource はリソースを所有しません。
このオーバーロードは、 std:: is_default_constructible_v < R > std:: is_default_constructible_v < D > の両方が true である場合にのみ、オーバーロード解決に参加します。
2) 格納されたリソースハンドルは、 std:: forward < RR > ( r ) で初期化される( std:: is_nothrow_constructible_v < RS, RR > true の場合)。それ以外の場合は r で初期化される。格納されたリソースハンドルの初期化が例外を送出した場合、 d ( r ) を呼び出す。
次に、デリーターは std:: forward < DD > ( d ) で初期化される( std:: is_nothrow_constructible_v < D, DD > true の場合)。それ以外の場合は d で初期化される。デリーターの初期化が例外を送出した場合、 d ( res_ ) を呼び出す。
構築された unique_resource はリソースを所有する。
このオーバーロードは、以下の条件がすべて 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 & > および std:: is_nothrow_constructible_v < D, DD > || std:: is_constructible_v < D, DD & > true である場合にのみ、オーバーロード解決に参加します。
プログラムは、いずれかの式 d ( r ) d ( res_ ) および del_ ( res_ ) がill-formedである場合、ill-formedとなる。
以下のいずれかの式が未定義動作を引き起こすか、例外をスローする場合、動作は未定義です: d ( r ) d ( res_ ) および del_ ( res_ )
3) ムーブコンストラクタ。格納されているリソースハンドルは、 other のリソースハンドルから初期化され、 std:: is_nothrow_move_constructible_v < RS > true の場合 std::move が使用される。格納されているリソースハンドルの初期化中に例外が発生した場合、 other は変更されない。
次に、デリーターは other のデリーターから初期化され、 std:: is_nothrow_move_constructible_v < D > true の場合 std::move が使用される。デリーターの初期化中に例外が発生し、かつ std:: is_nothrow_move_constructible_v < RS > true でかつ other がリソースを所有している場合、 other のデリーターを res_ で呼び出してリソースを破棄し、その後 other. release ( ) を呼び出す。
構築後、構築された unique_resource は、 other が構築前にリソースを所有していた場合にのみリソースを所有し、 other はリソースを所有しない状態に設定される。

目次

パラメータ

r - リソースハンドル
d - リソースを破棄するために使用するデリーター
other - 所有権を取得する別の unique_resource

例外

格納されたリソースハンドルまたはデリーターの初期化中にスローされた例外。

注記

これらのコンストラクタのメカニズムにより、リソースのリークが発生しないことが保証されます。

関連項目

新しい unique_ptr を構築する
( std::unique_ptr<T,Deleter> のpublicメンバ関数)