template <class T>
static void destroy(Alloc& a, T* p); // C++17 まで
template <class T>
static constexpr void destroy(Alloc& a, T* p); // C++20 から
概要
インスタンスを破棄する。
効果
- C++17 まで
a.destroy(p)
という式が有効ならそれを呼び出し、そうでなければデフォルト実装としてp->~T()
を呼び出す。 - C++20 から
a.destroy(p)
という式が有効ならそれを呼び出し、そうでなければデフォルト実装としてdestroy_at(p)
を呼び出す。
戻り値
なし
例
#include <iostream>
#include <memory>
#include <utility>
int main()
{
using value_type = std::pair<int, char>;
std::allocator<value_type> alloc;
using traits = std::allocator_traits<decltype(alloc)>;
std::size_t n = 1;
value_type* p = traits::allocate(alloc, n);
// メモリ領域にpairオブジェクトを構築
traits::construct(alloc, p, 3, 'a');
std::cout << p->first << ", " << p->second << std::endl;
// pairオブジェクトを破棄
traits::destroy(alloc, p);
traits::deallocate(alloc, p, n);
}
出力
3, a
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅
- GCC: 4.7.3 ✅
- ICC: ??
- Visual C++: 2012 ✅, 2013 ✅