什么是C++中的非平凡析构函数?

cpx*_*cpx 15 c++ destructor

我正在读这篇文章,提到破坏者是微不足道的,不平凡的.

如果一个类具有明确定义的析构函数,或者它具有成员对象或具有非平凡析构函数的基类,则该类具有非平凡的析构函数.

在示例中,我有一个班级,

class C {
    public:
     ~C(); // not explicitly declared.
};
Run Code Online (Sandbox Code Playgroud)

如果C::~C()隐式定义它是否会产生一个trival dtor?

Ker*_* SB 21

你的言语混乱了.您的示例确实声明了一个显式的析构函数.你也忘了定义它,所以你会得到一个链接器错误.

规则非常简单:您的类是否有明确的析构函数?如果是的话,那你就是非平凡的.如果不是,请检查每个非静态成员对象; 如果它们中的任何一个都是非平凡的,那么你就是非平凡的.

  • @CortAmmon:更确切地说,它需要*隐式定义*.用户声明是可以的,如果它也是*默认*(必须在第一次声明时发生). (6认同)
  • 并且作为旁注:`C ::〜C(){}`仍然是一个非平凡的析构函数.即使你什么也不做,*你*什么都不做.简单的析构函数/构造函数总是由编译器为您创建的. (5认同)