检查课程是否具有空灾难

Check if class has an empty destructor

本文关键字:是否 程是否 检查      更新时间:2023-10-16

假设我有一个类似:

的类
struct A {
public:
    A(int a, int c): a_(a+c), c_(a-c) { }
    A(const A& arg): a_(arg.a_), c_(arg.c_) { }
    int a_;
    char c_;
};

该类的对象位于某些题分配的内存区域内。在释放此内存区域期间,不应该称呼攻击器。因此,我想确保攻击者确实是空的。例如,如果有人会在A类中添加std::string s_;成员,那么如果不调用Destructor,显然将是一个内存泄漏。

如果A中没有构造函数和复制构造函数,我可以添加检查:

 static_assert(std::is_trivial<A>::value)

但是,对于A类,它将失败。

所以我的问题:我可以以某种方式在编译时间检查一下,如果此类班级的破坏者真的很空,没有任何工作?

这就是std::is_trivially_destructible的目的:

std::is_trivially_destructible<A>::value

确保到#include <type_traits>