命名空间
变体
操作

std::uses_allocator

来自 cppreference.cn
< cpp‎ | memory
 
 
内存管理库
(仅作演示*)
未初始化内存算法
(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
[静态]
true 如果 T 使用分配器 Alloc,否则为 false
(public static member constant)

成员函数

operator bool
将对象转换为 bool,返回 value
(public member function)
operator()
(C++14)
返回 value
(public member function)

成员类型

类型 定义
value_type bool
type std::integral_constant<bool, value>

[编辑] Uses-allocator 构造

将分配器 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...)),则 uses-allocator 构造使用此形式。
  • 如果 T 使用尾随分配器约定(可调用为 T(args..., alloc)),则 uses-allocator 构造使用此形式。
  • 否则,程序是非良构的(这意味着 std::uses_allocator_v<T, Alloc>true,但该类型不遵循两种允许的约定中的任何一种)。

实用工具函数 std::make_obj_using_allocatorstd::uninitialized_construct_using_allocator 可用于显式地按照上述协议创建对象,而 std::uses_allocator_construction_args 可用于准备与类型期望的 uses-allocator 构造风格相匹配的参数列表。

(自 C++20 起)

[编辑] 特化

给定一个程序定义的类型 T,它没有嵌套的 allocator_type,如果满足以下任何要求,程序可以特化 std::uses_allocator 以从 Tstd::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 使用。自定义分配器或包装器类型也可以使用它来确定正在构造的对象或成员本身是否能够使用分配器(例如,是否为容器),在这种情况下,应将分配器传递给其构造函数。

[编辑] 参见

用于选择分配器感知构造函数的标签
(标签)[编辑]
准备给定类型所需的 uses-allocator 构造风格的参数列表
(函数模板) [编辑]
通过 uses-allocator 构造创建给定类型的对象
(函数模板) [编辑]
通过 uses-allocator 构造在指定的内存位置创建给定类型的对象
(函数模板) [编辑]
为多层容器实现多层分配器
(类模板) [编辑]