检查空的析构函数

时间:2014-02-05 16:17:38

标签: c++ boost c++11 sfinae

有没有办法使用模板,宏或两者的组合来检查类中的空析构函数以及它继承的类内部? ( is_trivially_destructible 不会产生我需要的东西。)

class Test
{
   public:
   ~Test(){};
};

class Temp2 : public Test
{
};

1 个答案:

答案 0 :(得分:0)

构造函数“为空”并不意味着什么,因为任何非pod成员对象都会被编译器/隐式/破坏(即使没有声明析构函数)。

所以,实际上你想要的可能是

  • std::is_pod<T>::value

    注意:MSVC gets it wrong(例如struct X : std::array<int, 4> {}

  • std::is_trivial<T>::value

这个想法是只有当构造函数不做任何魔术时才能跳过构造函数。建筑和破坏的设计是完美平衡的,所以如果施工方也是如此,你就知道破坏者是微不足道的。