c++ - C++ 析构函数总是或仅有时调用数据成员析构函数吗?

标签 c++ destructor

我正在尝试验证我对 C++ 析构函数的理解。

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

我的预感是唯一理智的行为是无论如何都要销毁所有类字段,无论我是否提供自己的析构函数。在这种情况下,我读过很多次的声明实际上有点误导,最好表述为:

"Whether or not you write your own destructor, the C++ compiler always writes a default destructor-like sequence to deallocate the member variables of your class. You may then specify additional deallocations or other tasks as needed by defining your own destructor"

这是正确的吗?

最佳答案

在 C++ 中清理对象时,语言将

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

(这假定没有继承;如果有继承,则基类将按照相同的过程递归地销毁)。因此,您编写的析构函数代码只是您希望在对单个数据成员进行常规清理代码之外执行的自定义清理代码。您不会以某种方式“丢失”那些正常调用的对象的析构函数。

希望这对您有所帮助!

关于c++ - C++ 析构函数总是或仅有时调用数据成员析构函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19872072/

相关文章:

c++ - 将 Boost 添加到 CMake 项目?

c++ - 解释器如何在主要的 C++ 类中编写函数

python - Pybind11 或 Boost.Python 或两者都不是-

c++ - 为什么不能显式调用构造函数而析构函数可以?

c++ - 析构函数之前工作。如何?

c++ - OpenMP 原子和非原子读/写在 x86_64 上产生相同的指令

c++ - 为什么打印字符串数组输出十六进制?

c++ - 为什么我的程序在 _fini 中花费了 85% 的 CPU 周期?

C++函数调用,为什么要用析构函数?

c++ - 在析构函数中尝试双重释放或损坏