- memory_resource[meta header]
- function[meta id-type]
- std::pmr[meta namespace]
- polymorphic_allocator[meta class]
- cpp20[meta cpp]
template <class T>
void deallocate_object(T* p, size_t n = 1);
指定された個数のT
のメモリ領域を解放する。
p
の指すn
個のメモリ領域は以前に*this
の確保関数のいずれかによって確保された領域であること。
かつ、そのメモリ領域は未解放であること。
p
-- 解放したい領域へのポインタn
--p
に確保されているT
のオブジェクトの要素数
this->deallocate_bytes(p, n*sizeof(T), alignof(T));
- deallocate_bytes[link deallocate_bytes.md]
#include <iostream>
#include <memory_resource>
int main() {
constexpr int N = 10;
std::pmr::polymorphic_allocator<> alloc{};
//int型10個分の領域を確保
int* p = alloc.allocate_object<int>(N);
//確保した領域にintのオブジェクトを構築
for (int i = 0; i < N; ++i) {
alloc.construct(p+i, i);
}
for (int i = 0; i < N; ++i) {
std::cout << p[i] << "\n";
}
//領域上のオブジェクトを破棄
for (int i = 0; i < N; ++i) {
alloc.destroy(p+i);
}
//確保したメモリ領域を解放
alloc.deallocate_object(p, N);
}
- deallocate_object[color ff0000]
- construct[link construct.md]
- destroy[link destroy.md]
- allocate_object[link allocate_object.md]
0
1
2
3
4
5
6
7
8
9
- C++20
- Clang: ??
- GCC: 9.1
- Visual C++: ??