C++ 参考手册

位置:首页 > C++ 参考手册 >实验性 C++ 特性 > std::experimental::pmr::resource_adaptor

定义于头文件 <experimental/memory_resource>
template < class Alloc >

class resource_adaptor_imp : public memory_resource; // 仅为说明

template < class Allocator >
using resource_adaptor = resource_adaptor_imp<
                             typename std::allocator_traits<Allocator>::

                             template rebind_alloc<char>>;
(库基础 TS)

别名模版 resource_adaptor 将分配器类型 Allocatormemory_resource 接口适配。在实际适配前(用 resource_adaptor_imp 类模板)将分配器重绑定到 char 类型,故适配同一分配器的模板特化总是生成同一类型,无关乎分配器模板原先实例化所用的值类型。

resource_adaptor_imp 是类模板,成员描述如下。名称 resource_adaptor_imp 仅为说明用途,而非强制规定。

在满足分配器 (Allocator) 要求外, Allocator 必须额外满足下列要求:

  • pointer 应当等同于 value_type*
  • const_pointer 应当等同于 value_type const*
  • void_pointer 应当等同于 void*
  • const_void_pointer 应当等同于 void const*

resource_adaptor_imp 的成员类型

 
成员类型 定义
allocator_type Alloc

resource_adaptor_imp 的成员函数

std::experimental::pmr::resource_adaptor_imp::resource_adaptor_imp

resource_adaptor_imp() = default;
(1) (库基础 TS)
resource_adaptor_imp(const resource_adaptor_imp& other) = default;
(2) (库基础 TS)
resource_adaptor_imp(resource_adaptor_imp&& other) = default;
(3) (库基础 TS)
explicit resource_adaptor_imp(const Alloc& a2);
(4) (库基础 TS)
explicit resource_adaptor_imp(Alloc&& a2);
(5) (库基础 TS)
1) 默认构造函数。默认构造被包装分配器。
2) 复制构造函数。从 other 所包装的分配器复制构造被包装分配器。
3) 移动构造函数。从 other 所包装的分配器移动构造被包装分配器。
4)a2 初始化被包装分配器。
5)std::move(a2) 初始化被包装分配器。

参数

other - 复制或移动来源的另一 resource_adaptor_imp 对象
a2 - 复制或移动来源的另一 Alloc 对象

std::experimental::pmr::resource_adaptor_imp::get_allocator

allocator_type get_allocator() const;
(库基础 TS)

返回被包装分配器的副本。

std::experimental::pmr::resource_adaptor_imp::operator=

resource_adaptor_imp& operator=(const resource_adaptor_imp& other) = default;
(库基础 TS)

默认化的复制赋值运算符。从 other 的被包装分配器复制赋值被包装分配器。

std::experimental::pmr::resource_adaptor_imp::do_allocate

virtual void* do_allocate(std::size_t bytes, std::size_t alignment);
(库基础 TS)

用被包装分配器的 allocate 成员函数分配内存。

std::experimental::pmr::resource_adaptor_imp::do_deallocate

virtual void do_deallocate(void *p, std::size_t bytes, std::size_t alignment);
(库基础 TS)

用被包装分配器的 deallocate 成员函数解分配 p 所指向的存储。 p 必须已经用比较等于被包装分配器的分配器的 allocate 成员函数分配,而且之后必须未被解分配。

std::experimental::pmr::resource_adaptor_imp::do_is_equal

virtual bool do_is_equal(const memory_resource& other);
(库基础 TS)

pdynamic_cast<const resource_adaptor_imp*>(&other) 。若 pnullptr 则返回 false 。否则返回用 operator== 比较 *p*this 所包装的分配器的结果。