面试题答案
一键面试#include <iostream>
class Parent {
public:
~Parent() {
std::cout << "Parent destructor called." << std::endl;
}
};
class Child : public Parent {
public:
~Child() {
// 手动调用父类析构函数
Parent::~Parent();
std::cout << "Child destructor called." << std::endl;
}
};
父类析构函数自动调用情况
- 正常对象生命周期结束:当一个子类对象正常离开其作用域时,编译器会自动调用子类的析构函数,并且在子类析构函数执行完毕后,会自动调用父类的析构函数。例如:
int main() {
Child c;
return 0;
}
在上述代码中,Child
对象 c
离开 main
函数作用域时,先调用 Child
的析构函数,然后自动调用 Parent
的析构函数。
2. 使用 delete
释放动态分配的对象:当使用 new
运算符动态分配一个子类对象,并使用 delete
释放时,同样会先调用子类析构函数,再自动调用父类析构函数。例如:
int main() {
Child* c = new Child();
delete c;
return 0;
}
在这种情况下,delete c
会先调用 Child
的析构函数,然后自动调用 Parent
的析构函数。