名前空間
変種
操作

std::experimental::unique_resource

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

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

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

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

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

  • unique_resourceは、リソースハンドルであるか、あるいはそれをラップする型RSのサブオブジェクトと、型Dのデリータ、そしてラッパーがリソースを所有しているかどうかを示すboolフラグを実質的に保持します。
  • 説明のため、型RSのサブオブジェクトを「格納されたリソースハンドル (stored resource handle)」、そして格納された(Rがオブジェクト型の場合)またはラップされた(Rが参照型の場合)Rを「基底のリソースハンドル (underlying resource handle)」と呼びます。これら2つの用語はLFTSでは使用されていません。

目次

[編集] テンプレートパラメータ

R - リソースハンドルの型
D - デリータの型
型要件
-
Rはオブジェクト型またはオブジェクト型への左辺値参照でなければなりません。UnrefRstd::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)は適格 (well-formed) でなければなりません。

[編集] メンバ関数

新しいunique_resourceを構築する
(公開メンバ関数) [編集]
管理しているリソースが存在する場合、それを解放する
(公開メンバ関数) [編集]
unique_resourceを代入する
(公開メンバ関数) [編集]
変更
所有権を放棄する
(公開メンバ関数) [編集]
管理しているリソースを解放または置換する
(公開メンバ関数) [編集]
監視
基底のリソースハンドルにアクセスする
(公開メンバ関数) [編集]
管理しているリソースの解放に使用されるデリータにアクセスする
(公開メンバ関数) [編集]
リソースハンドルがポインタの場合、そのポインタが指す先にアクセスする
(公開メンバ関数) [編集]

[編集] 非メンバ関数

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

[編集] 推論補助

[編集] ノート

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

[編集]

[編集] 関連項目

オブジェクトの所有権を唯一のものとするセマンティクスを持つスマートポインタ
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)