template <class T>
void destroy(T* p);
概要
指定された領域にあるT
のオブジェクトを破棄する。
引数
p
-- 対象となるオブジェクトが構築されているメモリへのポインタ
効果
あたかもp->~T()
を実行したように、p
の指すT
のオブジェクトを破棄する。
メモリ領域の解放は行われないため、別にdeallocate
で行う必要がある。
例
#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, 2019共にこの関数は実装されなかった
関連項目
参照
- 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
- destroy: Missing member function of std::pmr::polymorphic_allocator - Developer Community
- LWG Issue 3036.
polymorphic_allocator::destroy
is extraneous - P2875R4 Undeprecate
polymorphic_allocator::destroy
for C++26- この関数はC++20で一度非推奨となったが、C++26で非推奨が取り消された。ただし、
allocator_traits<Alloc>::destroy()
関数やdestroy_at()
関数で同等のことができる
- この関数はC++20で一度非推奨となったが、C++26で非推奨が取り消された。ただし、