在Effective C++中,据说初始化列表中的数据元素需要按照它们的声明顺序列出。进一步说,这样做的原因是数据元素的析构函数以其构造函数的相反顺序被调用。
但我就是不明白这怎么会是个问题……
最佳答案
请考虑以下几点:
class Class {
Class( int var ) : var1( var ), var2(var1 ) {} // allright
//Class( int var ) : var2( var ), var1(var2 ) {} // var1 will be left uninitialized
int var1;
int var2;
};
第二个(被注释掉的)构造函数看起来没问题,但实际上只有var2
会被初始化——var1
会先被初始化,然后用初始化var2
在那一点上尚未初始化。
如果您以与成员变量在类声明中列出的顺序相同的顺序列出初始化程序,则此类错误的风险会大大降低。
关于C++ 初始化列表 - 我不明白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5153189/