面试题答案
一键面试- 调用顺序:
- 首先调用
Base
类的构造函数。 - 然后调用
Derived
类的构造函数。 - 程序结束时,先调用
Derived
类的析构函数。 - 最后调用
Base
类的析构函数。
- 首先调用
- 原因:
- 构造函数调用顺序:在创建派生类对象时,需要先初始化其基类部分。因为派生类对象包含基类的子对象,所以要先调用基类的构造函数来初始化这部分数据成员,然后再调用派生类自身的构造函数来初始化派生类特有的数据成员。所以
Base
类的构造函数先于Derived
类的构造函数调用。 - 析构函数调用顺序:析构函数的调用顺序与构造函数相反。当派生类对象被销毁时,首先要销毁派生类特有的部分,所以先调用派生类的析构函数,然后再销毁基类部分,即调用基类的析构函数。这确保了对象的资源能够按照正确的顺序释放,避免内存泄漏等问题。
- 构造函数调用顺序:在创建派生类对象时,需要先初始化其基类部分。因为派生类对象包含基类的子对象,所以要先调用基类的构造函数来初始化这部分数据成员,然后再调用派生类自身的构造函数来初始化派生类特有的数据成员。所以
所以程序运行时构造函数与析构函数的调用顺序如上述所描述。