条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
如果成员按它们在初始化列表上出现的顺序被初始化,那w1和w2中的数据成员被创建的顺序就会不同。我们知道,对一个对象的所有成员来说,它们的析构函数被调用的顺序总是和它们在构造函数里被创建的顺序相反。那么,如果允许上面的情况(即,成员按它们在初始化列表上出现的顺序被初始化)发生,编译器就要为每一个对象跟踪其成员初始化的顺序,以保证它们的析构函数以正确的顺序被调用。这会带来昂贵的开销。所以,为了避免这一开销,同一种类型的所有对象在创建(构造)和摧毁(析构)过程中对成员的处理顺序都是相同的,而不管成员在初始化列表中的顺序如何。
只是非静态数据成员的初始化遵守以上规则,另外,基类数据成员总是在派生类数据成员之前被初始化,所以使用继承时,要把基类的初始化列在成员初始化列表的最前面。
本文探讨了C++中对象构造与析构时成员变量的初始化顺序规则,特别是对于初始化列表中的顺序与实际构造顺序之间的关系进行了深入解析。
927

被折叠的 条评论
为什么被折叠?



