std::experimental::unique_resource
出自 cppreference.com
< cpp | experimental
| 定義於標頭檔 <experimental/scope> |
||
| template< class R, class D > class unique_resource; |
(library fundamentals TS v3) | |
unique_resource 是一個通用的 RAII 包裝器,用於資源控點(resource handles)。它透過控點擁有並管理資源,並在 unique_resource 被銷毀時處置該資源。
當發生下列任一情況時,會使用型別 D 的刪除器(deleter)來處置資源:
- 所管理的
unique_resource物件被銷毀時, - 所管理的
unique_resource物件透過 operator= 或 reset() 被賦予另一個資源時。
令型別 RS 為 R(若 R 是物件型別),否則為 std::reference_wrapper<std::remove_reference_t<R>>
-
unique_resource實際上持有一個型別為RS的子物件(即該資源控點或其包裝),一個型別為D的刪除器,以及一個 bool 旗標,用於指示該包裝器是否擁有該資源。 - 為了方便解釋,型別
RS的子物件稱為「儲存的資源控點」(stored resource handle),而儲存的(若R為物件型別)或包裝的(若R為參考型別)R稱為「底層資源控點」(underlying resource handle)。這兩個術語並非 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(公開成員函式) | |
| 若存在資源,則處置該被管理的資源 (公開成員函式) | |
指派一個 unique_resource(公開成員函式) | |
修改器 | |
| 釋放所有權 (公開成員函式) | |
| 處置或替換被管理的資源 (公開成員函式) | |
觀察器 | |
| 存取底層資源控點 (公開成員函式) | |
| 存取用於處置被管理資源的刪除器 (公開成員函式) | |
| 若資源控點是指標,則存取其指向的物件 (公開成員函式) | |
[編輯] 非成員函式
建立一個 unique_resource,並檢查是否為無效值(函式模板) |
[編輯] 推導指引
[編輯] 附註
滿足 NullablePointer(可為空指標)的資源控點型別也可以由 std::unique_ptr 管理。與 unique_ptr 不同,unique_resource 不需要滿足 NullablePointer。
[編輯] 範例
| 本節尚不完整 理由:無範例 |
[編輯] 參見
| (C++11) |
具有唯一物件所有權語意的智慧型指標 (類別範本) |