名稱空間
變體
操作

std::uses_allocator

來自 cppreference.com
< cpp‎ | 記憶體
 
 
記憶體管理庫
(僅作說明*)
未初始化記憶體演算法
(C++17)
(C++17)
(C++17)
受約束的未初始化
記憶體演算法
C 庫

分配器
uses_allocator
(C++11)
記憶體資源
垃圾回收支援
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
未初始化儲存
(直到 C++20*)
(直到 C++20*)
顯式生命週期管理
 
定義於標頭檔案 <memory>
template< class T, class Alloc >
struct uses_allocator;
(C++11 起)

如果 T 具有巢狀型別 allocator_type,並且該型別可從 Alloc 轉換,則成員常量 valuetrue。否則,valuefalse

目錄

[編輯] 輔助變數模板

template< class T, class Alloc >
constexpr bool uses_allocator_v = uses_allocator<T, Alloc>::value;
(C++17 起)

繼承自 std::integral_constant

成員常量

value
[靜態]
如果 T 使用分配器 Alloc 則為 true,否則為 false
(public static 成員常量)

成員函式

operator bool
將物件轉換為 bool,返回 value
(公開成員函式)
operator()
(C++14)
返回 value
(公開成員函式)

成員型別

型別 定義
value_type bool
型別 std::integral_constant<bool, value>

[編輯] 使用分配器構造

將分配器 alloc 傳遞給某種型別 T 的建構函式有三種約定

  • 如果 T 不使用相容的分配器(std::uses_allocator_v<T, Alloc>false),則忽略 alloc
  • 否則,std::uses_allocator_v<T, Alloc>true,且
  • 如果 T 使用“前導分配器約定”(可作為 T(std::allocator_arg, alloc, args...) 呼叫),則使用分配器構造採用此形式。
  • 如果 T 使用“尾隨分配器約定”(可作為 T(args..., alloc) 呼叫),則使用分配器構造採用此形式。
  • 否則,程式格式錯誤(這意味著 std::uses_allocator_v<T, Alloc>true,但該型別不遵循兩種允許的約定中的任何一種)。

工具函式 std::make_obj_using_allocatorstd::uninitialized_construct_using_allocator 可用於顯式建立遵循上述協議的物件,而 std::uses_allocator_construction_args 可用於準備與型別期望的使用分配器構造方式匹配的引數列表。

(C++20 起)

[編輯] 特化

給定一個沒有巢狀 allocator_type程式定義型別 T,如果滿足以下任一要求,程式可以特化 std::uses_allocator 以從 std::true_type 派生用於 T

  • T 具有一個建構函式,它將 std::allocator_arg_t 作為第一個引數,將 Alloc 作為第二個引數。
  • T 具有一個建構函式,它將 Alloc 作為最後一個引數。

在上述中,Alloc 是一個滿足 Allocator 或可轉換為 std::experimental::pmr::memory_resource* 的指標型別(庫基礎 TS) 的型別。

標準庫已提供以下特化

特化 std::uses_allocator 型別特性
(類模板特化) [編輯]
特化 std::uses_allocator 型別特性
(類模板特化) [編輯]
特化 std::uses_allocator 型別特性
(類模板特化) [編輯]
特化 std::uses_allocator 型別特性
(類模板特化) [編輯]
特化 std::uses_allocator 型別特性
(類模板特化) [編輯]
特化 std::uses_allocator 型別特性
(類模板特化) [編輯]
特化 std::uses_allocator 型別特性
(類模板特化) [編輯]
特化 std::uses_allocator 型別特性
(類模板特化) [編輯]
特化 std::uses_allocator 型別特性
(類模板特化) [編輯]
特化 std::uses_allocator 型別特性
(類模板特化) [編輯]
特化 std::uses_allocator 型別特性
(類模板特化) [編輯]

[編輯] 註解

此型別特性由 std::tuplestd::scoped_allocator_adaptorstd::pmr::polymorphic_allocator 使用。它也可以由自定義分配器或包裝型別使用,以確定被構造的物件或成員本身是否能夠使用分配器(例如,是否為容器),在這種情況下,應將分配器傳遞給其建構函式。

[編輯] 參閱

用於選擇分配器感知建構函式的標記
(標記)[編輯]
準備與給定型別所需的使用分配器構造方式匹配的引數列表
(函式模板) [編輯]
透過 uses-allocator 構造建立給定型別的物件
(函式模板) [編輯]
透過使用分配器構造在指定記憶體位置建立給定型別的物件
(函式模板) [編輯]
為多層容器實現多層分配器
(類模板) [編輯]