规则“用户定义但不做任何事情的析构函数也是不平凡的析构函数”是否太严格?

时间:2018-12-22 08:05:49

标签: c++

class Base
{
public:
    ~Base() {}
private:
    int val;
};

Base base; // a global variable

看,析构函数什么也不做,与c ++编译器提供的默认析构函数相同。但是析构函数仍然是帖子What is a non-trivial destructor in C++?

的重要角色

我知道,标准中的每个规则都必须严格。

但是,根据我粘贴的高位代码,用户定义的析构函数实际上什么也没做!为什么它也是不平凡的?我不明白。...

有什么我不知道的魔法吗?

1 个答案:

答案 0 :(得分:1)

具有完全禁止该规则的规则赋予提供一个空的定义具有含义:它指定不得在提供其存储的数组中忘记其实例。析构函数所做的(如果有的话)可以被视为实施细节,在将来的版本中可能会发生变化。它还避免根据类定义中是否定义了“空”析构函数来更改含义。如果不是这样,甚至可以将其更改为二进制兼容。