explicit monotonic_buffer_resource(memory_resource* upstream); //(1)
monotonic_buffer_resource(size_t initial_size, memory_resource *upstream); //(2)
monotonic_buffer_resource(void *buffer, size_t buffer_size,
memory_resource *upstream); //(3)
monotonic_buffer_resource()
: monotonic_buffer_resource(get_default_resource()) {} //(4)
explicit monotonic_buffer_resource(size_t initial_size)
: monotonic_buffer_resource(initial_size, get_default_resource()) {} //(5)
monotonic_buffer_resource(void *buffer, size_t buffer_size)
: monotonic_buffer_resource(buffer, buffer_size, get_default_resource()) {} //(6)
monotonic_buffer_resource(const monotonic_buffer_resource&) = delete; //(7)
概要
- (1) : 上流
memory_resource
を受けて構築 - (2) : 内部メモリ領域の初期サイズを指定し、上流
memory_resource
を受けて構築 - (3) : 別に確保されたメモリ領域を初期メモリ領域として使用し、上流
memory_resource
を受けて構築 - (4) : デフォルトコンストラクタ、
- (5) : 内部メモリ領域の初期サイズを指定し構築
- (6) : 別に確保されたメモリ領域を初期メモリ領域として使用し構築
- (7) : コピーコンストラクタ、コピー禁止
要件
- (1)(2)(3) :
upstream
は有効なmemory_resource
オブジェクトを指していること。(当然、nullでないこと) - (2)(5) :
initial_size
は0より大きいこと - (3)(6) :
buffer_size
はbuffer
に割り当てられているメモリ領域のサイズ以下であること。
引数
upstream
-- 利用したい上流memory_resource
へのポインタinitial_size
-- 内部メモリ領域の初期サイズbuffer
-- 初期メモリ領域として利用する外部メモリへのポインタbuffer_size
--buffer
の指す領域のサイズ
効果
-
(1) :
upstream
を上流memory_resource
として設定し、初期メモリ領域を空(nullptr
)、次に補充するメモリサイズを実装定義の値に設定 -
(2) :
upstream
を上流memory_resource
として設定し、初期メモリ領域を空(nullptr
)、次に補充するメモリサイズをinitial_size
に設定 -
(3) :
upstream
を上流memory_resource
として設定し、buffer
を初期メモリ領域、buffer_size
に実装定義の増加分を足した値(整数とは限らない)を次に補充するメモリサイズに設定 -
(4) :
get_default_resource()
から取得したmemory_resource
を(1)に渡し委譲 -
(5) :
initial_size
とget_default_resource()
から取得したmemory_resource
を(2)に渡し委譲 -
(6) :
buffer
とbuffer_size
及びget_default_resource()
から取得したmemory_resource
を(3)に渡し委譲
(4)(5)(6)のコンストラクタは上流メモリリソースとしてget_default_resource()
から取得したmemory_resource
を利用する。
備考
どのコンストラクタの初期化においても、上流メモリリソースの所有権を保持しない。
例
#include <memory_resource>
int main()
{
//(1) 上流メモリリソースを受けて構築
{
std::pmr::synchronized_pool_resource pr{};
std::pmr::monotonic_buffer_resource mr{ &pr };
}
//(2) 初期サイズと上流メモリリソースを受けて構築
{
std::pmr::synchronized_pool_resource pr{};
std::pmr::monotonic_buffer_resource mr{ 1024, &pr };
}
//(3) 外部領域を初期メモリ領域として利用し、上流メモリリソースを受けて構築
{
char buf[1024]{};
std::pmr::synchronized_pool_resource pr{};
std::pmr::monotonic_buffer_resource mr{ buf, sizeof(buf), &pr };
}
//(4) デフォルト構築
{
std::pmr::monotonic_buffer_resource mr{};
}
//(5) 初期サイズのみを指定して構築
{
std::pmr::monotonic_buffer_resource mr{ 1024 };
}
//(6) 外部領域を初期メモリ領域として利用し構築
{
char buf[1024]{};
std::pmr::monotonic_buffer_resource mr{ buf, sizeof(buf) };
}
}
出力
バージョン
言語
- C++17
処理系
- Clang: ??
- GCC: 9.1 ✅
- Visual C++: 2017 update 6 ✅