跳到主要内容

std::pmr::polymorphic_allocator

定义于memory_resource
自 C++20 起
template< class T = std::byte >
class polymorphic_allocator;
自 C++17 起,直到 C++17
template< class T >
class polymorphic_allocator;

类模板 std::pmr::polymorphic_allocator 是一个 Allocator,它根据构造它的 std::pmr::memory_resource 表现出不同的分配行为。由于 memory_resource 使用运行时多态性来管理分配,因此以 polymorphic_allocator 作为其静态分配器类型的不同容器实例可以互操作,但可以表现得像是它们具有不同的分配器类型。

polymorphic_allocator 的所有特化都满足 Allocator 完整性要求

polymorphic_allocator::construct 成员函数执行 uses-allocator 构造,以便使用 polymorphic_allocator 的容器的元素将使用相同的分配器进行自己的分配。例如,std::pmr::vector<std::pmr::string> 将对 vector 的存储和每个 string 的存储使用相同的 memory_resource。

成员类型

公有成员类型定义
公有value_typeT

成员函数

公有(构造函数)构造 polymorphic_allocator
公有(析构函数)(隐式声明)隐式声明的析构函数
公有operator= (已删除)复制赋值运算符已删除
公有allocate分配内存
公有deallocate释放内存
公有构造在已分配的存储中构造对象
公有销毁 (在 C++20 中已弃用)销毁已分配存储中的对象
公有allocate_bytes(C++20)从底层资源分配原始对齐内存
公有deallocate_bytes(C++20)释放从 allocate_bytes 获取的原始内存
公有allocate_object(C++20)分配适合对象或数组的原始内存
公有deallocate_object(C++20)释放通过 allocate_object 获取的原始内存
公有new_object(C++20)分配并构造对象
公有delete_object(C++20)销毁并释放对象
公有select_on_container_copy_construction为容器的复制构造函数创建新的 polymorphic_allocator
公有resource返回指向底层内存资源的指针

非成员函数

公有operator==
operator!= (在 C++20 中移除)
比较两个 polymorphic_allocator

备注

polymorphic_allocator 不在容器复制赋值、移动赋值或交换时传播。因此,使用 polymorphic_allocator 的容器的移动赋值可能会抛出异常,并且交换两个使用 polymorphic_allocator 且其分配器不相等的容器会导致未定义行为。

特性测试宏
__cpp_lib_polymorphic_allocator

std::pmr::polymorphic_allocator

定义于memory_resource
自 C++20 起
template< class T = std::byte >
class polymorphic_allocator;
自 C++17 起,直到 C++17
template< class T >
class polymorphic_allocator;

类模板 std::pmr::polymorphic_allocator 是一个 Allocator,它根据构造它的 std::pmr::memory_resource 表现出不同的分配行为。由于 memory_resource 使用运行时多态性来管理分配,因此以 polymorphic_allocator 作为其静态分配器类型的不同容器实例可以互操作,但可以表现得像是它们具有不同的分配器类型。

polymorphic_allocator 的所有特化都满足 Allocator 完整性要求

polymorphic_allocator::construct 成员函数执行 uses-allocator 构造,以便使用 polymorphic_allocator 的容器的元素将使用相同的分配器进行自己的分配。例如,std::pmr::vector<std::pmr::string> 将对 vector 的存储和每个 string 的存储使用相同的 memory_resource。

成员类型

公有成员类型定义
公有value_typeT

成员函数

公有(构造函数)构造 polymorphic_allocator
公有(析构函数)(隐式声明)隐式声明的析构函数
公有operator= (已删除)复制赋值运算符已删除
公有allocate分配内存
公有deallocate释放内存
公有构造在已分配的存储中构造对象
公有销毁 (在 C++20 中已弃用)销毁已分配存储中的对象
公有allocate_bytes(C++20)从底层资源分配原始对齐内存
公有deallocate_bytes(C++20)释放从 allocate_bytes 获取的原始内存
公有allocate_object(C++20)分配适合对象或数组的原始内存
公有deallocate_object(C++20)释放通过 allocate_object 获取的原始内存
公有new_object(C++20)分配并构造对象
公有delete_object(C++20)销毁并释放对象
公有select_on_container_copy_construction为容器的复制构造函数创建新的 polymorphic_allocator
公有resource返回指向底层内存资源的指针

非成员函数

公有operator==
operator!= (在 C++20 中移除)
比较两个 polymorphic_allocator

备注

polymorphic_allocator 不在容器复制赋值、移动赋值或交换时传播。因此,使用 polymorphic_allocator 的容器的移动赋值可能会抛出异常,并且交换两个使用 polymorphic_allocator 且其分配器不相等的容器会导致未定义行为。

特性测试宏
__cpp_lib_polymorphic_allocator