std::pmr:: polymorphic_allocator
|
定义于头文件
<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
是一种
分配器
,其分配行为根据构造时使用的
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
(公开成员函数) |
|
|
(destructor)
(implicitly declared)
|
隐式声明的析构函数
(公开成员函数) |
|
operator=
[deleted]
|
复制赋值运算符被删除
(公开成员函数) |
公开成员函数 |
|
|
分配内存
(公开成员函数) |
|
|
释放内存
(公开成员函数) |
|
|
在已分配存储中构造对象
(公开成员函数) |
|
|
(deprecated in C++20)
(undeprecated in 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)
|
封装内存资源的抽象接口类
(类) |