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); }
出力
314
バージョン
言語
- C++17
処理系
- Clang: 4.0.1
- GCC: 7.3
- Visual C++: ??