最終更新日時(UTC):
が更新

履歴 編集

function
<memory_resource>

std::pmr::pool_resource::コンストラクタ(C++17)

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)

概要

  • (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} };
  }
}

出力

バージョン

言語

  • C++17

処理系

関連項目

参照