Boost C++ 库

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

Class memory_resource

boost::container::pmr::memory_resource

概要

// In header: <boost/container/pmr/memory_resource.hpp>


class memory_resource {
public:

  // public member functions
  virtual ~memory_resource();
  void * allocate(std::size_t, std::size_t = max_align);
  void deallocate(void *, std::size_t, std::size_t = max_align);
  bool is_equal(const memory_resource &) const noexcept;

  // friend functions
  bool operator==(const memory_resource &, const memory_resource &) noexcept;
  bool operator!=(const memory_resource &, const memory_resource &) noexcept;

  // protected member functions
  virtual void * do_allocate(std::size_t, std::size_t) = 0;
  virtual void do_deallocate(void *, std::size_t, std::size_t) = 0;
  virtual bool do_is_equal(const memory_resource &) const = 0;

  // public data members
  BOOST_STATIC_CONSTEXPR std::size_t max_align;
};

描述

memory_resource 类是一个抽象接口,指向封装内存资源的无界类集合。

memory_resource 公有成员函数

  1. virtual ~memory_resource();

    效果: 销毁此 memory_resource

  2. void * allocate(std::size_t bytes, std::size_t alignment = max_align);

    效果: 等效于 return do_allocate(bytes, alignment);

  3. void deallocate(void * p, std::size_t bytes, 
                    std::size_t alignment = max_align);

    效果: 等效于 return do_deallocate(bytes, alignment);

  4. bool is_equal(const memory_resource & other) const noexcept;

    效果: 等效于 return do_is_equal(other);

memory_resource 友元函数

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

    返回值: &a == &b || a.is_equal(b)

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

    返回值: !(a == b)。

memory_resource 保护成员函数

  1. virtual void * do_allocate(std::size_t bytes, std::size_t alignment) = 0;

    要求: 对齐方式应为 2 的幂。

    返回值: 派生类应实现此函数,以返回指向已分配存储的指针,该存储的大小至少为 bytes。如果支持指定的对齐方式,则返回的存储将按指定的对齐方式对齐;否则,它将与 max_align 对齐。

    抛出: 如果派生类实现无法分配具有请求大小和对齐方式的内存,则应抛出适当的异常。

  2. virtual void 
    do_deallocate(void * p, std::size_t bytes, std::size_t alignment) = 0;

    要求: p 应从先前对与 *this 相等的内存资源调用 allocate(bytes, alignment) 返回,并且 p 处的存储应尚未被释放。

    效果: 派生类应实现此函数以处置已分配的存储。

    抛出: 无。

  3. virtual bool do_is_equal(const memory_resource & other) const = 0;

    返回值: 派生类应实现此函数,以在可以从 other 释放由此分配的内存,反之亦然时返回 true;否则应返回 false。 [注意:other 的最派生类型可能与此类型不匹配。对于派生类 D,此函数的典型实现将计算 dynamic_cast<const D*>(&other),如果它返回 nullptr,则不再继续(即,返回 false)。 - 尾注]


PrevUpHomeNext