- memory_resource[meta header]
- std::pmr[meta namespace]
- function[meta id-type]
- cpp17[meta cpp]
namespace std::pmr {
memory_resource* set_default_resource(memory_resource* r) noexcept;
}
polymorphic_allocator
のコンストラクタ等で、memory_resource
が指定されない場合に利用されるデフォルトのmemory_resource
を設定する。
r
-- 設定するmemory_resource
のポインタ
r
がnullでなければ、デフォルトのmemory_resource
のポインタをr
に設定する。
r
がnullならば、デフォルトのmemory_resource
のポインタをnew_delete_resource()
に設定する。
この関数はスレッドセーフである。
この関数(set_default_resource()
)の呼び出しと、後続のこの関数もしくはget_default_resource()
の呼び出しは同期的に実行される。
すなわち、この関数自身とget_default_resource()
の呼び出しはデータ競合を起こさない。
以前に設定されていたデフォルトのmemory_resource
のポインタ。
投げない。
この関数は受け取るmemory_resource
の所有権を保持しない。
そのため、設定するmemory_resource
オブジェクトの寿命には注意する必要がある。
#include <iostream>
#include <memory_resource>
int main()
{
auto* mr = std::pmr::get_default_resource();
std::cout << std::boolalpha;
std::cout << (mr == std::pmr::new_delete_resource()) << std::endl;
//monotonic_buffer_resourceを設定
std::pmr::monotonic_buffer_resource mono_mr{};
auto* befor_mr = std::pmr::set_default_resource(&mono_mr);
std::cout << (mr == std::pmr::get_default_resource()) << std::endl;
std::cout << (mr == befor_mr) << std::endl;
}
- set_default_resource[color ff0000]
- get_default_resource[link get_default_resource.md]
- new_delete_resource[link new_delete_resource.md]
- monotonic_buffer_resource[link monotonic_buffer_resource.md]
true
false
true
- C++17
- Clang: ??
- GCC: 9.1
- Visual C++: 2017 update 6