假设我有一个类:
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级来说,它会失败。
所以我的问题:如果这类的析构函数真的是空的并且没有做任何工作,我可以在编译时以某种方式检查吗?
答案 0 :(得分:7)
这是std::is_trivially_destructible
的用途:
std::is_trivially_destructible<A>::value
确保#include <type_traits>
。