- memory[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp17[meta cpp]
namespace std {
template <class T>
void destroy_at(T* location);
}
デストラクタを呼び出す。
この関数は、配置new
で構築したオブジェクトを破棄するために使用する。
以下と等価:
location->~T();
- 非自明なデストラクタをもたない
int
やchar
配列のような型のオブジェクトに対しては、デストラクタを呼び出す必要はない。std::is_trivially_destructible_v
<T> == true
な型に対しては、なにもしない最適化が行われる可能性がある- 例として、
std::optional
クラスのデストラクタ、およびstd::vector
クラスのデストラクタを参照
- 例として、
#include <iostream>
#include <memory>
int main()
{
// 配置newでオブジェクトを構築
char storage[4];
int* n = new(storage) int;
*n = 314;
std::cout << *n << std::endl;
// デストラクタを呼び出して破棄
std::destroy_at(n);
}
- std::destroy_at[color ff0000]
314
- C++17
- Clang: 4.0.1
- GCC: 7.3
- Visual C++: ??