std::pmr::polymorphic_allocator
来自 cppreference.cn
定义于头文件 <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 中已取消弃用) |
在已分配的存储中销毁对象 (公共成员函数) |
(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) |
封装内存资源的类的抽象接口 (类) |