繁体   English   中英

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

[英]What is a non-trivial destructor in C++?

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

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

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

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

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

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

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

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

class C { };

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

我认为一般来说它指的是一个实际执行以下操作析构函数

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM