Namespaces
Variants

std::experimental:: unique_resource

From cppreference.net
ヘッダーで定義 <experimental/scope>
template < class R, class D >
class unique_resource ;
(ライブラリ基盤 TS v3)

unique_resource は、リソースハンドルを所有し管理する汎用的なRAIIラッパーであり、ハンドルを通じてリソースを管理し、 unique_resource が破棄されるときにそのリソースを解放します。

リソースは、以下のいずれかが発生したときに型 D のデリーターを使用して破棄されます:

  • 管理している unique_resource オブジェクトが破棄されたとき、
  • 管理している unique_resource オブジェクトが operator= または reset() を介して別のリソースから代入されたとき。

RS を、 R がオブジェクト型の場合は R とし、それ以外の場合は std:: reference_wrapper < std:: remove_reference_t < R >> とする:

  • unique_resource は、リソースハンドルを保持またはラップする型 RS の副オブジェクトと、型 D のデリータ、およびラッパーがリソースを所有しているかどうかを示す bool フラグを効果的に保持します。
  • 説明のために、型 RS の副オブジェクトは 格納リソースハンドル と呼ばれ、格納された( R がオブジェクト型の場合)またはラップされた( R が参照型の場合) R 基盤リソースハンドル と呼ばれます。これらの用語はLFTSでは使用されません。

目次

テンプレートパラメータ

R - リソースハンドル型
D - デリーター型
型要件
-
R はオブジェクト型またはオブジェクト型への左辺値参照でなければならない。 UnrefR std:: remove_reference_t < R > とすると、 UnrefR MoveConstructible でなければならず、 UnrefR CopyConstructible でない場合、 std:: is_nothrow_move_constructible_v < UnrefR > true でなければならない。
-
D Destructible かつ MoveConstructible FunctionObject 型でなければならず、 D CopyConstructible でない場合、 std:: is_nothrow_move_constructible_v < D > true でなければならない。型 D の左辺値 d と型 UnrefR の左辺値 r が与えられたとき、式 d ( r ) は整形式でなければならない。

メンバー関数

新しい unique_resource を構築する
(public member function)
管理対象リソースが存在する場合、それを破棄する
(public member function)
unique_resource を代入する
(public member function)
修飾子
所有権を解放する
(public member function)
管理対象リソースを破棄または置換する
(public member function)
オブザーバ
基盤となるリソースハンドルにアクセスする
(public member function)
管理対象リソースの破棄に使用されるデリータにアクセスする
(public member function)
リソースハンドルがポインタの場合、ポインタ先にアクセスする
(public member function)

非メンバー関数

無効値をチェックして unique_resource を作成する
(関数テンプレート)

推論ガイド

注記

NullablePointer を満たすリソースハンドル型は、 std::unique_ptr によって管理することもできます。 unique_ptr とは異なり、 unique_resource NullablePointer を必要としません。

関連項目

(C++11)
ユニークなオブジェクト所有権セマンティクスを持つスマートポインタ
(クラステンプレート)