在C++中,构造函数和析构函数的调用顺序遵循特定的规则:
- 构造函数的调用顺序:
- 首先,调用基类(父类)的构造函数。
- 然后,按照声明的顺序调用成员对象的构造函数。
- 最后,调用派生类(子类)的构造函数。
- 析构函数的调用顺序:
- 首先,调用派生类(子类)的析构函数。
- 然后,按照声明的逆序调用成员对象的析构函数。
- 最后,调用基类(父类)的析构函数。
下面是一个简单的例子来说明构造函数和析构函数的调用顺序:
#include <iostream>
class Base {
public:
Base() { std::cout << "Base constructor called." << std::endl; }
~Base() { std::cout << "Base destructor called." << std::endl; }
};
class Derived : public Base {
public:
Derived() { std::cout << "Derived constructor called." << std::endl; }
~Derived() { std::cout << "Derived destructor called." << std::endl; }
};
int main() {
Derived d;
// 构造函数调用顺序:Base -> Derived
// 析构函数调用顺序:Derived -> Base
return 0;
}
在这个例子中,当你创建 Derived
类的实例 d
时,首先会调用基类 Base
的构造函数,然后调用派生类 Derived
的构造函数。当 d
离开作用域时,首先会调用派生类 Derived
的析构函数,然后调用基类 Base
的析构函数。