命名空间
变体
操作

std::pmr::polymorphic_allocator

来自 cppreference.cn
< cpp‎ | memory
 
 
内存管理库
(仅为解释说明*)
未初始化内存算法
(C++17)
(C++17)
(C++17)
受约束的未初始化
内存算法
C 库

分配器
pmr::polymorphic_allocator
(C++17)
内存资源
垃圾回收支持
(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++17 中已弃用)
(直到 C++20*,在 C++17 中已弃用)
(直到 C++20*,在 C++17 中已弃用)
显式生命周期管理
 
 
定义于头文件 <memory_resource>
template< class T >
class polymorphic_allocator;
(自 C++17 起)
(直到 C++20)
template< class T = std::byte >
class polymorphic_allocator;
(自 C++20 起)

类模板 std::pmr::polymorphic_allocator 是一个 Allocator,它根据构造它的 std::pmr::memory_resource 表现出不同的分配行为。由于 memory_resource 使用运行时多态性来管理分配,因此具有 polymorphic_allocator 作为其静态分配器类型的不同容器实例是可互操作的,但其行为可能如同它们具有不同的分配器类型。

polymorphic_allocator 的所有特化都满足 分配器完整性要求

polymorphic_allocator::construct 成员函数执行 uses-allocator 构建,以便使用 polymorphic_allocator 的容器的元素将使用相同的分配器进行它们自己的分配。例如,std::pmr::vector<std::pmr::string> 将对 vector 的存储和每个 string 的存储使用相同的 memory_resource

对于非多态分配器,可以使用 std::scoped_allocator_adaptor 来实现类似的传播。

目录

[编辑] 成员类型

成员类型 定义
value_type T

[编辑] 成员函数

构造一个 polymorphic_allocator
(公共成员函数) [编辑]
(析构函数)
(隐式声明)
隐式声明的析构函数
(公共成员函数) [编辑]
operator=
[已删除]
复制赋值运算符已删除
(公共成员函数) [编辑]
公共成员函数
分配内存
(公共成员函数) [编辑]
释放内存
(公共成员函数) [编辑]
在已分配的存储中构造对象
(公共成员函数) [编辑]
(在 C++20 中已弃用)(在 C++26 中已取消弃用)
在已分配的存储中销毁对象
(公共成员函数) [编辑]
从底层资源分配原始对齐的内存
(公共成员函数) [编辑]
释放从 allocate_bytes 获取的原始内存
(公共成员函数) [编辑]
分配适用于对象或数组的原始内存
(公共成员函数) [编辑]
释放由 allocate_object 获取的原始内存
(公共成员函数) [编辑]
分配并构造一个对象
(公共成员函数) [编辑]
销毁并释放一个对象
(公共成员函数) [编辑]
创建一个新的 polymorphic_allocator 以供容器的复制构造函数使用
(公共成员函数) [编辑]
返回指向底层内存资源的指针
(公共成员函数) [编辑]

[编辑] 非成员函数

(在 C++20 中移除)
比较两个 polymorphic_allocator
(函数) [编辑]

[编辑] 注解

polymorphic_allocator 在容器复制赋值、移动赋值或交换时不会传播。因此,使用 polymorphic_allocator 的容器的移动赋值可能会抛出异常,并且交换两个分配器不相等的使用 polymorphic_allocator 的容器会导致未定义行为。

特性测试 标准 特性
__cpp_lib_polymorphic_allocator 201902L (C++20) std::pmr::polymorphic_allocator<> 作为一种词汇类型

[编辑] 参见

封装内存资源的类的抽象接口
(类) [编辑]