您的位置:首页 > 编程语言 > C语言/C++

关于c++的类中成员变量初始化问题+初始化列表中对应顺序问题!

2011-07-03 08:50 639 查看
在项目中发现了一个很严重的问题,到后来才发现是类成员初始化的问题,想起来Effictive C++中曾经提到过这些。写在博客里以供提醒。
template<class T>
class Array {
public:
Array(int lowBound, int highBound);
...
private:
vector<T> data; // 数组数据存储在vector 对象中
// 关于vector 模板参见条款49
size_t size; // 数组中元素的数量
int lBound, hBound; // 下限,上限
};
template<class T>
Array<T>::Array(int lowBound, int highBound)
: size(highBound - lowBound + 1),
lBound(lowBound), hBound(highBound),
data(size)
{}
构造函数会对参数进行合法性检查,以保证highBound 至少要大于等于
lowBound,但这里有个很糟糕的错误:即使数组的上下限值合法,也绝对没人
会知道data 里会有多少个元素。
原因:类成员是按照它们在类里被声明的顺序进行初始化的,和它们在成员初始化列表中列出的顺序没一点关系。
用上面的Array模板生成的类里,data总是会首先初始化,然后是size,IBound和hBound.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: