检查类是否有空的析构函数

时间:2016-12-08 06:08:02

标签: c++ c++11

假设我有一个类:

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_;
};

此类的对象位于一些dinamically分配的内存区域内。在释放该存储区域期间,不应该调用析构函数。 所以我想确保析构函数真的是空的。例如,如果某人将std::string s_;成员添加到A类中,那么如果不调用析构函数,则显然会出现内存泄漏。

如果A中没有Constructor和Copy Constructor,那么我可以添加check:

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

但是对于A级来说,它会失败。

所以我的问题:如果这类的析构函数真的是空的并且没有做任何工作,我可以在编译时以某种方式检查吗?

1 个答案:

答案 0 :(得分:7)

这是std::is_trivially_destructible的用途:

std::is_trivially_destructible<A>::value

确保#include <type_traits>