确定如何销毁给定类型的对象

Determine how to destruct an object of a given type

所以我目前正在制作我自己的 std::vector 版本以在内核模式下使用。但是我遇到了 运行 问题:我不确定如何确定如何正确销毁给定元素。例如,您可以用整数填充一个数组,而无需执行任何操作来销毁它。但是对于 class 你需要在特定位置使用 new(address) Class(); 初始化它并像这样手动调用它的析构函数 Class->~Class().

显然,您可以使用 type_traits 中的函数检查给定类型是否具有析构函数,但这对我来说根本不可用,因为它没有随 WDK 一起提供。

所以我的问题是,如何确定如何销毁给定类型的对象?

你不必。您可以为要销毁的 T 类型的任何对象 o 调用 obj.~T()。如果它有一个普通的析构函数,则此调用可能不会导致编译器发出任何操作。

此外,您还应该放置新的普通类型,即使它们没有显式实现的构造函数。

MWE:

#include <type_traits>
#include <new>

using T = int;

int main() {
  std::aligned_storage_t<sizeof(int), alignof(int)> storage;
  T* p = new(&storage) T;
  p->~T();  // results in zero instructions emitted
}

参见live demo