std::pmr::polymorphic_allocator
来自cppreference.com
在标头 <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 中取消弃用) |
销毁处于已分配内存的对象 (公开成员函数) |
(C++20) |
从底层资源分配未处理的对齐内存 (公开成员函数) |
(C++20) |
释放从 allocate_bytes 获得的未处理内存 (公开成员函数) |
(C++20) |
分配适合单个对象或数组的未处理内存 (公开成员函数) |
(C++20) |
释放由 allocate_object 获得的未处理内存 (公开成员函数) |
(C++20) |
分配并创建对象 (公开成员函数) |
(C++20) |
销毁并解分配对象 (公开成员函数) |
为容器的复制构造函数的使用创建一个新的 polymorphic_allocator (公开成员函数) | |
返回指向底层内存资源的指针 (公开成员函数) |
非成员函数
(C++20 中移除) |
比较两个 polymorphic_allocator (函数) |
注解
polymorphic_allocator
在容器复制赋值、移动赋值或交换时不传播。结果是,使用 polymorphic_allocator
的容器的移动赋值可能抛出异常,且交换两个使用 polymorphic_allocator
,而所用分配器比较不相等的容器导致未定义行为。
功能特性测试宏 | 值 | 标准 | 功能特性 |
---|---|---|---|
__cpp_lib_polymorphic_allocator |
201902L | (C++20) | 以 std::pmr::polymorphic_allocator<> 为一种基本术语类型
|
参阅
(C++17) |
一个抽象接口,用于各种封装内存资源的类 (类) |