命名空间
变体
操作

std::pmr::polymorphic_allocator

来自 cppreference.cn
< cpp‎ | 内存
 
 
内存管理库
(仅作说明*)
未初始化内存算法
(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++20*)
显式生命周期管理
 
 
定义于头文件 <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 成员函数执行使用分配器构造,因此使用 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<> 作为词汇类型

[编辑] 参阅

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