Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 确定如何销毁给定类型的对象_C++_Constructor_Kernel_Destructor - Fatal编程技术网

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

C++ 确定如何销毁给定类型的对象,c++,constructor,kernel,destructor,C++,Constructor,Kernel,Destructor,因此,我目前正在制作自己版本的std::vector,用于内核模式。然而,我遇到了一个问题:我不知道如何确定如何正确地破坏给定的元素。例如,您可以用整数填充数组,而不需要做任何事情来破坏它。但是对于一个类,您需要使用new(address)class()在特定位置初始化它~Class() 显然,您可以通过使用type_traits中的函数来检查给定类型是否具有析构函数,但由于WDK中没有附带该函数,所以我无法使用该函数 所以我的问题是,如何确定如何销毁给定类型的对象?您不必这样做。您可以对类型为

因此,我目前正在制作自己版本的std::vector,用于内核模式。然而,我遇到了一个问题:我不知道如何确定如何正确地破坏给定的元素。例如,您可以用整数填充数组,而不需要做任何事情来破坏它。但是对于一个类,您需要使用
new(address)class()在特定位置初始化它Class->~Class()

显然,您可以通过使用type_traits中的函数来检查给定类型是否具有析构函数,但由于WDK中没有附带该函数,所以我无法使用该函数


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

您不必这样做。您可以对类型为
T
的任何对象
o
调用
obj.~T()
。如果它有一个平凡的析构函数,那么这个调用很可能不会导致编译器发出任何操作

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

MWE:

#包括
#包括
使用T=int;
int main(){
标准:对齐的存储;
T*p=新(存储)T;
p->~T();//导致发出零条指令
}

该死的,不知道为什么我会觉得那样不行,谢谢你的洞察力!
#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
}