C++析构函数总是或者有时只调用数据成员析构函数吗?

Mag*_*nus 8 c++ destructor

我试图验证我对C++析构函数的理解.

我已多次读过C++提供默认的析构函数,如果我自己不编写它的话.但这是否意味着如果我写一个析构函数,编译器仍然不会提供堆栈分配的类字段的默认清理?

我的预感是,唯一理智的行为就是所有类字段都会被破坏,无论我是否提供自己的析构函数.在这种情况下,我读过这么多次的陈述实际上有点误导,可以更好地说明:

"无论你是否编写自己的析构函数,C++编译器总是编写一个类似于默认析构函数的序列来解除分类的成员变量.然后你可以通过定义自己的析构函数来指定其他的解除分配或其他任务"

它是否正确?

tem*_*def 21

当用C++清理对象时,语言会

  • 首先调用类的析构函数,然后
  • 为类的所有字段调用析构函数.

(这假定没有继承;如果有继承,则通过递归地遵循相同的过程来销毁基类).因此,您编写的析构函数代码只是您想要执行的自定义清理代码,以及单个数据成员的正常清理代码.你不会以某种方式"丢失"那些被称为正常对象的析构函数.

希望这可以帮助!