命名空間
變體
動作

std::experimental::unique_resource

出自 cppreference.com
 
 
實驗性
技術規範
檔案系統函式庫 (filesystem TS)
函式庫基礎 (library fundamentals TS)
函式庫基礎 2 (library fundamentals TS v2)
函式庫基礎 3 (library fundamentals TS v3)
平行化擴充 (parallelism TS)
平行化擴充 2 (parallelism TS v2)
並行化擴充 (concurrency TS)
並行化擴充 2 (concurrency TS v2)
概念 (concepts TS)
範圍 (ranges TS)
反射 (reflection TS)
數學特殊函數 (special functions TR)
實驗性非 TS
模式匹配
線性代數
std::execution
合約
2D 圖形
 
 
 
定義於標頭檔 <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() 被賦予另一個資源時。

令型別 RSR(若 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 必須為物件型別或物件型別的左值參考。令 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) 必須是格式正確的。

[編輯] 成員函式

建構一個新的 unique_resource
(公開成員函式) [編輯]
若存在資源,則處置該被管理的資源
(公開成員函式) [編輯]
指派一個 unique_resource
(公開成員函式) [編輯]
修改器
釋放所有權
(公開成員函式) [編輯]
處置或替換被管理的資源
(公開成員函式) [編輯]
觀察器
存取底層資源控點
(公開成員函式) [編輯]
存取用於處置被管理資源的刪除器
(公開成員函式) [編輯]
若資源控點是指標,則存取其指向的物件
(公開成員函式) [編輯]

[編輯] 非成員函式

建立一個 unique_resource,並檢查是否為無效值
(函式模板) [編輯]

[編輯] 推導指引

[編輯] 附註

滿足 NullablePointer(可為空指標)的資源控點型別也可以由 std::unique_ptr 管理。與 unique_ptr 不同,unique_resource 不需要滿足 NullablePointer

[編輯] 範例

[編輯] 參見

具有唯一物件所有權語意的智慧型指標
(類別範本) [編輯]
English Deutsch 日本語 中文(简体) 中文(繁體)