void deallocate(Tp* p, std::size_t n);
概要
指定されたメモリ領域を解放する。
要件
利用するmemory_resourceのポインタをmemory_rsrcというメンバに保持しているとして
pは、(*memory_rsrc == x) == trueとなるようなxのx.allocate(n * sizeof(Tp), alignof(Tp))によって以前に確保された領域であること。
つまりは、同じオブジェクトであるか、同じメモリプールを共有しているようなmemory_resourceのオブジェクトによって事前に確保された領域であること。
そして、そのメモリ領域は未解放であること。
引数
p-- 解放する領域の先頭へのポインタn-- 解放する領域の個数、バイト数ではなく配列の要素数相当
効果
利用するmemory_resourceのポインタをmemory_rsrcというメンバに保持しているとすると、以下と等価である。
memory_rsrc->deallocate(p, n * sizeof(Tp), alignof(Tp));
例外
投げない。
例
#include <iostream>
#include <memory_resource>
int main()
{
std::pmr::polymorphic_allocator<int> alloc{};
//メモリの確保
int* array = alloc.allocate(4);
//要素を構築
for (int i = 0; i < 4; ++i) {
alloc.construct(array + i, i);
}
for (int i = 0; i < 4; ++i) {
std::cout << array[i] << std::endl;
}
//要素を破棄
for (int i = 0; i < 4; ++i) {
alloc.destroy(array + i);
}
//メモリの解放
alloc.deallocate(array, 4);
}
出力
0
1
2
3
バージョン
言語
- C++17
処理系
- Clang: ??
- GCC: 9.1 ✅
- Visual C++: 2017 update 6 ✅