void release();
概要
管理している全てのメモリを解放する。
効果
必要に応じてthis->upstream_resource()->deallocate()を呼び出し上流メモリリソースから割り当てた全てのメモリを解放する。
deallocate()によって割り当て解除されていないメモリがあったとしても、全てのメモリが解放される。
解放後の状態は、バージョンによって異なる。
- C++17 : コンストラクタで設定された初期メモリ領域が再び割り当てに利用可能になるかどうかは規定されていない
- C++23 :
*thisを構築時の初期状態にリセットする。これにより、コンストラクタで設定された初期メモリ領域が再び割り当てに利用可能になる
例
#include <iostream>
#include <memory_resource>
int main() {
std::pmr::monotonic_buffer_resource mr{};
//メモリを確保
auto* p1 = mr.allocate(sizeof(int), alignof(int));
auto* p2 = mr.allocate(sizeof(int), alignof(int));
//解放せずにrelease
mr.release();
//以降、p1,p2の領域にアクセスしてはならない
}
出力
バージョン
言語
- C++17
処理系
- Clang: ??
- GCC: 9.1 ✅
- Visual C++: 2017 update 6 ✅
関連項目
参照
- P0220R1 Adopt Library Fundamentals V1 TS Components for C++17 (R1)
- P0337r0 | Delete operator= for polymorphic_allocator
- Working Draft, C++ Extensions for Library Fundamentals, Version 2
- LWG Issue 3120. Unclear behavior of
monotonic_buffer_resource::release()- C++23で、
release()の効果が、*thisを構築時の初期状態にリセットする(初期バッファが再び利用可能になる)ことと明確化された
- C++23で、