# std::experimental::pmr::resource_adaptor

< cpp‎ | experimental

定义于头文件 `<experimental/memory_resource>` |  |
template< class Alloc > using resource_adaptor = /*resource-adaptor-imp*/< typename std::allocator_traits<Allocator>:: template rebind_alloc<char>>; |  | (库基础 TS)
template< class Alloc > class /*resource-adaptor-imp*/ : public memory_resource; // 仅用于阐释 |  | (库基础 TS)

别名模版 `resource_adaptor` 将分配器类型 `Allocator` 与 `memory_resource` 接口适配。在实际适配前（用 `resource-adaptor-imp` 类模板）将分配器重绑定到 `char` 类型，故适配同一分配器的模板特化总是生成同一类型，无关乎分配器模板原先实例化所用的值类型。

`resource-adaptor-imp` 是类模板，成员描述如下。名称 `resource-adaptor-imp` 仅为阐释用途，而非强制规定。

除了符合分配器 (Allocator) 要求， `Alloc` 还必须额外满足下列要求：

- std::allocator_traits<Alloc>::pointer 应当等同于 Alloc::value_type* 。
- std::allocator_traits<Alloc>::const_pointer 应当等同于 Alloc::value_type const* 。
- std::allocator_traits<Alloc>::void_pointer 应当等同于 void* 。
- std::allocator_traits<Alloc>::const_const_pointer 应当等同于 void const* 。

本页面中的类型 `memory_resorce` 在 LFTS v1 与 v2 中代表 std::experimental::pmr::memory_resource ，但从 LFTS v3 起代表 std::pmr::memory_resource 。

### resource-adaptor-imp 的成员类型

成员类型 | 定义
`allocator_type` | `Alloc`

### resource-adaptor-imp 的成员函数

## 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` 对象

## resource-adaptor-imp::get_allocator

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

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

## resource-adaptor-imp::operator=

/*resource-adaptor-imp*/& operator=(const /*resource-adaptor-imp*/& other) = default; |  | (库基础 TS)

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

## resource-adaptor-imp::do_allocate

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

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

## resource-adaptor-imp::do_deallocate

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

用被包装分配器的 `deallocate` 成员函数解分配 `p` 所指向的存储。

`p` 必须已经用比较等于被包装分配器的分配器的 `allocate` 成员函数分配，而且之后必须未被解分配。

## resource-adaptor-imp::do_is_equal

protected: virtual bool do_is_equal(const memory_resource& other) const noexcept; |  | (库基础 TS)

令 `p` 为 dynamic_cast<const /*resource-adaptor-imp*/*>(&other) 。若 `p` 为空指针值则返回 false 。否则返回用 operator== 比较 *p 和 *this 所包装的分配器的结果。