- 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_resource
とunsynchronized_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
- Clang: ??
- GCC: 9.1 [mark verified]
- Visual C++: 2017 update 6 [mark verified]