Skip to content

Latest commit

 

History

History
112 lines (85 loc) · 4.68 KB

op_constructor.md

File metadata and controls

112 lines (85 loc) · 4.68 KB

コンストラクタ

  • memory_resource[meta header]
  • function[meta id-type]
  • std::pmr[meta namespace]
  • pool_resource[meta class]
  • cpp17[meta cpp]
pool_resource(const pool_options& opts, memory_resource* upstream);  //(1)

pool_resource()
      : pool_resource(pool_options(), get_default_resource()) {}     //(2)

explicit pool_resource(memory_resource* upstream)
      : pool_resource(pool_options(), upstream) {}                   //(3)

explicit pool_resource(const pool_options& opts)
      : pool_resource(opts, get_default_resource()) {}               //(4)

pool_resource(const pool_resource&) = delete;                        //(5)
  • pool_options[link /reference/memory_resource/pool_options.md]
  • get_default_resource()[link /reference/memory_resource/get_default_resource.md]

概要

  • (1) : pool_optionsによる設定と上流memory_resourceを受けて構築
  • (2) : デフォルトコンストラクタ
  • (3) : 上流memory_resourceを受けて構築
  • (4) : pool_optionsによる設定を受けて構築
  • (5) : コピーコンストラクタ、コピー禁止

クラス名をpool_resourceとしているのは説明のためのプレースホルダで、synchronized_pool_resourceunsynchronized_pool_resourceで共通ということである。

要件

  • (1)(3) : upstreamは有効なmemory_resourceオブジェクトを指していること。(当然、nullでないこと)

引数

  • opts -- 内部メモリプール設定を指定するpool_optionsオブジェクト
  • upstream -- 利用したい上流memory_resourceへのポインタ

効果

  • (1) : 内部のメモリプールをopts設定により調整し、上流メモリリソースとしてupstreamを利用するpool_resourceを構築する。
  • (2) : デフォルト設定を使用し、 get_default_resource()から上流メモリリソースを取得して構築。
  • (3) : デフォルト設定を使用し、上流メモリリソースとしてupstreamを利用するpool_resourceを構築する。
  • (4) : 内部のメモリプールをopts設定により調整し、get_default_resource()から上流メモリリソースを取得して構築。

例外

upstream->allocate()が例外を投げないのならば、すべてのコンストラクタは例外を投げない。
ただし、これらのコンストラクタがupstream->allocate()を呼び出すかどうか、またはどの様な条件の下でupstream->allocate()を呼び出すかは未規定。

備考

どのコンストラクタの初期化においても、上流memory_resourceの所有権を保持しない。

実装は必ずしもoptsの設定を利用しない。

以下ではsynchronized_pool_resourceで書いてあるが、unsynchronized_pool_resourceも同様。

#include <memory_resource>

int main() {
  //(1) pool_optionsと上流メモリリソースを受けて構築
  {
    std::pmr::synchronized_pool_resource mr{ {1024, 4096}, std::pmr::new_delete_resource() };
  }

  //(2) デフォルト構築
  {
    std::pmr::synchronized_pool_resource mr{};
  }

  //(3) 上流メモリリソースだけを受けて構築
  {
    std::pmr::monotonic_buffer_resource mono_mr{};
    std::pmr::synchronized_pool_resource mr{ &mono_mr };
  }

  //(4) pool_optionsだけを受けて構築
  {
    std::pmr::synchronized_pool_resource mr{ {4096, 4096} };
  }
}
  • synchronized_pool_resource[color ff0000]
  • new_delete_resource[link /reference/memory_resource/new_delete_resource.md]
  • monotonic_buffer_resource[link /reference/memory_resource/monotonic_buffer_resource.md]

出力

バージョン

言語

  • C++17

処理系

関連項目

参照