笔者面试时,经常被问到基类和派生类之间构造函数和析构函数的调用顺序的问题。今天写个简单程序记录一下。
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
// 基类
class Parent {
public:
Parent() { cout << "Parent()" << endl; };
virtual ~Parent() {
cout << "~Parent()" << endl;
}
};
// 派生类
class Child :public Parent {
public:
Child() {
cout << "Child()" << endl;
}
~Child() {
cout << "~Child()" << endl;
}
};
int main() {
Parent* obj = new Child;
delete obj;
return 0;
}
以下是输出。
总结:
构造顺序为:先调用基类的构造函数,再调用派生类的构造函数,
析构顺序为:先调用派生类的析构函数,再调用基类的析构函数。
更简单的记忆:构造时是先有父后有子(肯定是有了老子再有儿子)。析构时相反。