【问题标题】:Check if class has an empty destructor检查类是否有一个空的析构函数
【发布时间】:2023-03-25 14:28:01
【问题描述】:

假设我有这样的课程:

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_; 成员添加到 A 类中,那么如果不调用析构函数,显然会发生内存泄漏。

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

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

但是对于A类它会失败。

所以我的问题是:我可以在编译时以某种方式检查此类的析构函数是否真的为空并且不做任何工作吗?

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

    这就是std::is_trivially_destructible 的用途:

    std::is_trivially_destructible<A>::value
    

    确保#include &lt;type_traits&gt;

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 2013-11-02
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多