面试题答案
一键面试#include <iostream>
class Parent {
public:
Parent() {
std::cout << "Parent constructor" << std::endl;
}
virtual ~Parent() {
std::cout << "Parent destructor" << std::endl;
}
};
class Child : public Parent {
public:
Child() {
std::cout << "Child constructor" << std::endl;
}
~Child() override {
std::cout << "Child destructor" << std::endl;
// 父类析构函数会被自动调用,无需显式调用
}
};
在C++中,当子类对象被销毁时,子类的析构函数会首先执行,然后会自动调用父类的析构函数。这是语言机制保证的,目的是确保对象在销毁时,其继承体系中的所有部分都能得到正确清理。如果父类中有需要释放的资源(如动态分配的内存、打开的文件句柄等),父类析构函数负责清理这些资源,通过这种自动调用机制,可以保证资源的正确释放,避免资源泄漏。如果父类析构函数不是虚函数,当通过父类指针删除子类对象时,可能只会调用父类析构函数而不会调用子类析构函数,导致子类部分资源无法释放,所以通常将父类析构函数声明为虚函数。在这个例子中,虽然不需要显式调用父类析构函数,但父类析构函数声明为虚函数是一种良好的编程习惯。