参考博客:传送门1
当类中含有对象成员时:
- 类的构造函数要包含对成员对象的初始化,如果构造函数的成员初始化列表没有包含对成员对象的初始化,系统会自动调用成员对象的无参构造函数。顺序上:先调用成员对象的构造函数,当所有的成员对象都执行了自身类的构造函数以后再执行当前类的构造函数
- 调用析构函数时先调用类的构造函数,再调用成员对象的构造函数。
当类继承于另一个类时:
- 如果没有显式地在构造函数的成员初始化列表中调用基类的构造函数,会自动先调用基类的无参构造函数。
- 析构的时候先调用派生类的析构函数,再调用基类的构造函数。
当类中含有成员对象,同时继承了某个类的时候,他们的构造函数析构函数的顺序是固定的(与成员初始化列表中的顺序没有关系):
构造函数:基类->成员对象->派生类
析构函数:派生类->成员对象->基类
例如:
#include<iostream>
#include<cstdio>
using namespace std;class A
{
public:A(){cout << "A" << endl;}~A(){cout << "~A" << endl;}
};class C
{
public:C(){cout << "C" << endl;}~C(){cout << "~C" << endl;}
};class B:public A
{C c;
public:B(){cout << "B" << endl;}~B(){cout << "~B" << endl;}
};int main()
{B b;
}
运行结果: