std::experimental::unique_resource
來自 cppreference.com
| 定義於標頭檔案 <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 成員函式) | |
| 如果存在,處置所管理的資源 (public 成員函式) | |
賦值一個 unique_resource(public 成員函式) | |
修改器 | |
| 釋放所有權 (public 成員函式) | |
| 處置或替換所管理的資源 (public 成員函式) | |
觀察器 | |
| 訪問底層資源控制代碼 (public 成員函式) | |
| 訪問用於處置所管理資源的刪除器 (public 成員函式) | |
| 如果資源控制代碼是指標,訪問所指向的物件 (public 成員函式) | |
[編輯] 非成員函式
建立一個 unique_resource,檢查無效值(函式模板) |
[編輯] 推導指南
[編輯] 註釋
滿足 可空指標 (NullablePointer) 的資源控制代碼型別也可以由 std::unique_ptr 管理。與 unique_ptr 不同,unique_resource 不要求 可空指標 (NullablePointer)。
[編輯] 示例
| 本節不完整 原因:無示例 |
[編輯] 參閱
| (C++11) |
具有唯一物件所有權語義的智慧指標 (類模板) |