【问题标题】:Determine how to destruct an object of a given type确定如何破坏给定类型的对象
【发布时间】:2020-11-08 10:36:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ constructor kernel destructor


    【解决方案1】:

    您不必这样做。您可以为您希望销毁的 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

    【讨论】:

    • 该死,不知道为什么我的印象是那行不通,谢谢你的洞察力!
    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 2018-09-05
    • 2018-06-19
    • 2013-03-04
    • 1970-01-01
    • 2016-09-06
    • 2011-01-14
    相关资源
    最近更新 更多