构造函数初始化按照如下顺序进行
1. 首先构造虚拟基类,任何虚拟基类的构造函数按照它们被继承的顺序构造;
2. 其次构造非虚拟基类,任何非虚拟基类的构造函数按照它们被继承的顺序构造;
3. 接着构造成员对象,任何成员对象的构造函数按照它们声明的顺序调用;
4. 最后调用类自身的构造函数;
析构函数就无脑的将构造函数顺序反转即可。
接下来举一个简单但是全面的例子帮助理解
#include <iostream>
using namespace std;
class OBJ1
{
public:
OBJ1() { cout << "OBJ1" << endl; }
~OBJ1() { cout << "OBJ1 destory" << endl;}
};
class OBJ2
{
public:
OBJ2() { cout << "OBJ2\n"; }
~OBJ2(){cout << "OBJ2 destory" <<endl;}
};
class Base1
{
public:
Base1() { cout << "Base1" << endl; }
~Base1() { cout << "Base1 destory" << endl; }
};
class Base2
{
public:
Base2() { cout << "Base2" << endl; }
~Base2() { cout << "Base2 destory" << endl; }
};
class Base3
{
public:
Bas