- 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
- Visual C++: 2017 update 6