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