命名空间
变体
操作

std::uses_allocator

来自 cppreference.com
< cpp‎ | memory
 
 
实用程序库
语言支持
类型支持 (基本类型,RTTI)
库特性测试宏 (C++20)
动态内存管理
程序实用程序
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三路比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用实用程序
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
通用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
基本字符串转换
(C++17)
(C++17)

 
动态内存管理
未初始化内存算法
受限未初始化内存算法
分配器
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)



 
定义在头文件 <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
(公共静态成员常量)

成员函数

operator bool
将对象转换为 bool,返回 value
(公共成员函数)
operator()
(C++14)
返回 value
(公共成员函数)

成员类型

类型 定义
value_type bool
type 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 具有一个构造函数,它将 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 使用。它也可以由自定义分配器或包装类型使用,以确定正在构造的对象或成员本身是否能够使用分配器(例如,是容器),在这种情况下,应将分配器传递给它的构造函数。

[编辑] 参见

用于选择支持分配器的构造函数的标签
(标签)[编辑]
准备与给定类型所需的使用分配器构造风格匹配的参数列表
(函数模板) [编辑]
通过使用分配器构造创建给定类型的对象
(函数模板) [编辑]
通过使用分配器构造在指定内存位置创建给定类型的对象
(函数模板) [编辑]
实现多级容器的多级分配器
(类模板) [编辑]