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 ✅