- memory_resource[meta header]
- std::pmr[meta namespace]
- function[meta id-type]
- cpp17[meta cpp]
namespace std::pmr {
memory_resource* null_memory_resource() noexcept;
}メモリの確保も解放も行わないmemory_resourceを取得する。
この関数によって取得されたmemory_resourceは以下の特徴を持つ。
allocate()の呼び出しは常に、bad_alloc例外を投げる。deallocate()の呼び出しは何も行わない。
静的記憶域期間に配置されているmemory_resource実装のオブジェクトへのポインタを返す。
呼び出し時は常に同じポインタを返す。
投げない。
この関数で取得したポインタをp、その他任意のmemory_resourceオブジェクトをrとすると、p->is_equal(r)は&r == pを返す。
実装クラスの型名は未規定。
#include <iostream>
#include <memory_resource>
int main()
{
auto* mr = std::pmr::null_memory_resource();
std::pmr::polymorphic_allocator<int> alloc(mr);
std::cout << mr << std::endl;
std::cout << std::pmr::null_memory_resource() << std::endl;
try {
auto* p = mr->allocate(sizeof(int), alignof(int));
}
catch (const std::exception& except) {
//必ずここを通る
std::cout << except.what() << std::endl;
}
}- null_memory_resource[color ff0000]
- polymorphic_allocator[link polymorphic_allocator.md]
00007FFCB3396270
00007FFCB3396270
bad allocation
- C++17
- Clang: ??
- GCC: 9.1 [mark verified]
- Visual C++: 2017 update 6 [mark verified]