析构函数和构造函数的调用顺序
时间: 2024-06-03 08:11:17 浏览: 102
在C++中,当一个对象被创建时,首先会自动调用构造函数来初始化对象的成员变量;当对象被销毁时,会自动调用析构函数来清理对象所占用的资源。因此,构造函数的调用顺序是先基类构造函数,然后派生类构造函数;而析构函数的调用顺序则相反,先派生类析构函数,然后基类析构函数。这个顺序确保了基类对象的生命周期与派生类对象的生命周期是一致的。
相关问题
组合类构造函数与析构函数的调用顺序?
在使用组合类时,其构造函数和析构函数的调用顺序如下:
1. 首先调用成员对象的构造函数,按照它们在类中声明的顺序进行调用。
2. 然后调用组合类的构造函数。
3. 当组合类的对象被销毁时,先调用组合类的析构函数。
4. 然后按照成员对象的创建顺序的逆序调用它们的析构函数。
例如,假设有以下代码:
```
class A {
public:
A() { cout << "A constructor" << endl; }
~A() { cout << "A destructor" << endl; }
};
class B {
public:
B() { cout << "B constructor" << endl; }
~B() { cout << "B destructor" << endl; }
};
class C {
public:
C() { cout << "C constructor" << endl; }
~C() { cout << "C destructor" << endl; }
private:
A a;
B b;
};
int main() {
C c;
return 0;
}
```
输出结果为:
```
A constructor
B constructor
C constructor
C destructor
B destructor
A destructor
```
可以看到,先调用成员对象 A 和 B 的构造函数,然后调用组合类 C 的构造函数。当对象 c 被销毁时,先调用组合类 C 的析构函数,然后按照成员对象的创建顺序的逆序调用它们的析构函数,即先调用成员对象 B 的析构函数,再调用成员对象 A 的析构函数。
说一说构造函数与析构函数的调用顺序
在C++中,当创建一个对象时,会自动调用构造函数进行初始化。而当对象被销毁时,会自动调用析构函数进行清理操作。构造函数与析构函数的调用顺序如下:
1. 当对象被创建时,先调用基类的构造函数,再调用成员变量的构造函数,最后调用派生类的构造函数。
2. 当对象被销毁时,先调用派生类的析构函数,再调用成员变量的析构函数,最后调用基类的析构函数。
例如,假设有如下代码:
```
class A {
public:
A() { cout << "A constructor" << endl; }
~A() { cout << "A destructor" << endl; }
};
class B {
public:
B() { cout << "B constructor" << endl; }
~B() { cout << "B destructor" << endl; }
};
class C : public A {
public:
C() { cout << "C constructor" << endl; }
~C() { cout << "C destructor" << endl; }
private:
B b;
};
int main() {
C c;
return 0;
}
```
输出结果为:
```
A constructor
B constructor
C constructor
C destructor
B destructor
A destructor
```
可以看到,对象的构造函数调用顺序是先调用基类的构造函数,再调用成员变量的构造函数,最后调用派生类的构造函数。而对象的析构函数调用顺序则是先调用派生类的析构函数,再调用成员变量的析构函数,最后调用基类的析构函数。
阅读全文