std::pmr::polymorphic_allocator

来自cppreference.com
< cpp‎ | memory
 
 
动态内存管理
未初始化内存算法
受约束的未初始化内存算法
分配器
垃圾收集器支持
(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_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<> 为一种基本术语类型

参阅

一个抽象接口,用于各种封装内存资源的类
(类)