条款04:确定对象被使用前已先被初始化
类的构造函数的次序是先执行构造函数初始化列表,初始化所有成员变量,然后再执行构造函数体,构造函数体内的成员赋值已经不属于初始化的范畴,成员都是用拷贝赋值。
如果类没有初始化列表,则类会先执行默认构造函数,构造出所有成员变量后,再执行函数体内的拷贝赋值。
C++类的成员初始化是有着明显的次序的,一般是基类的成员先初始化,然后派生类的成员按定义的顺序初始化。所以类的构造函数初始化列表上的初始化顺序跟类真实的成员初始化顺序是没有关系的。
“不同编译单元内定义之non-local static对象”
static对象,其寿命从被构造出来直到程序结束为止。
函数内的static对象称为local static对象(因为它们对函数而言是local),其他static对象称为non-local static对象。程序结束时static对象会被自动销毁,也就是它们的析构函数会在main()结束时被自动调用。