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

时间:2011-11-19 00:32:17

标签: c++ destructor

我正在阅读this,其中提到破坏者是微不足道的,非平凡的。

  

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

例如,我有一个班级,

class C {
    public:
     ~C(); // not explicitly declared.
};

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

3 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分:4)

你的意思是,C的整个声明是这样的:

class C { };

然后,是的:由于C没有成员对象而没有基类,因此它没有具有非平凡析构函数的成员对象,也没有具有非平凡析构函数的基类,因此其隐式定义的析构函数是一个微不足道的。

答案 2 :(得分:0)

我认为一般来说它指的是析构函数,它实际上是做某事,例如:

  • 释放内存
  • 关闭与数据库的连接
  • 或照顾任何需要发布的资源

在这种情况下,析构函数不执行任何操作。根据描述,从技术上讲,它可能是“非平凡的”,因为它定义了一个构造函数,但不重要,因为它无论如何都不起作用。