我正在尝试验证我对 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/