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

 

在项目中发现了一个很严重的问题,到后来才发现是类成员初始化的问题,想起来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.

发布了29 篇原创文章 · 获赞 4 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章