# 实验性库头文件 <experimental/memory_resource>

< cpp‎ | header‎ | experimental

此头文件是库基础 TS (v1, v2, v3) 的一部分。

### 类

定义于命名空间 `std::experimental::pmr`
memory_resource | 一个抽象接口，用于各种封装内存资源的类 (类)
synchronized_pool_resource | 线程安全的 memory_resource，用于管理具有不同块大小的池中的分配 (类)
unsynchronized_pool_resource | 线程不安全的 memory_resource，用于管理具有不同块大小的池中的分配 (类)
monotonic_buffer_resource | 一种特殊用途的 memory_resource，仅在资源被销毁时才释放所分配内存 (类)
polymorphic_allocator | 以 memory_resource 构造，支持基于它的运行时多态的分配器 (类模板)
resource_adaptor | 适配一个分配器为一个 memory_resource (别名模板)

### 函数

定义于命名空间 `std::experimental::pmr`
##### 比较
operator==operator!= | 比较两个 `memory_resource` (函数)
operator==operator!= | 比较两个分配器 (函数模板)
##### 全局内存资源
new_delete_resource | 返回一个静态的程序范围 `memory_resource`，它使用全局 operator new 与 operator delete 分配和解分配内存 (函数)
null_memory_resource | 返回一个不进行任何分配的静态 `memory_resource` (函数)
##### 缺省内存资源
get_default_resource | 获取缺省 `memory_resource` (函数)
set_default_resource | 设置缺省 `memory_resource` (函数)

### 概要

    namespace std {
    namespace experimental {
    inline namespace fundamentals_v1 {
    namespace pmr {

      class memory_resource;

      bool operator==(const memory_resource& a,
                      const memory_resource& b) noexcept;
      bool operator!=(const memory_resource& a,
                      const memory_resource& b) noexcept;

      template <class Tp> class polymorphic_allocator;

      template <class T1, class T2>
      bool operator==(const polymorphic_allocator<T1>& a,
                      const polymorphic_allocator<T2>& b) noexcept;
      template <class T1, class T2>
      bool operator!=(const polymorphic_allocator<T1>& a,
                      const polymorphic_allocator<T2>& b) noexcept;

      // 名字 resource_adaptor_imp 仅用于阐释。
      template <class Allocator> class resource_adaptor_imp;

      template <class Allocator>
        using resource_adaptor = resource_adaptor_imp<
          typename allocator_traits<Allocator>::template rebind_alloc<char>>;

      // 全局内存资源
      memory_resource* new_delete_resource() noexcept;
      memory_resource* null_memory_resource() noexcept;

      // 缺省内存资源
      memory_resource* set_default_resource(memory_resource* r) noexcept;
      memory_resource* get_default_resource() noexcept;

      // 标准内存资源
      struct pool_options;
      class synchronized_pool_resource;
      class unsynchronized_pool_resource;
      class monotonic_buffer_resource;

    } // namespace pmr
    } // namespace fundamentals_v1
    } // namespace experimental
    } // namespace std