关于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.
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.
相关文章推荐
- 关于C++中类的初始化列表中初始化变量顺序问题
- C++成员变量初始化顺序问题
- C++成员变量初始化列表和变量初始化顺序
- C++成员变量的初始化顺序问题
- C++成员变量的初始化顺序问题
- C++成员变量的初始化顺序问题
- 【转】C++成员变量的初始化顺序问题
- C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误
- C++成员变量初始化列表执行顺序
- C++成员变量的初始化顺序如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。
- C++成员变量的初始化顺序问题
- C++成员变量的初始化顺序问题
- C++ 成员变量的初始化顺序问题详解
- C++成员变量的初始化顺序问题
- C++成员变量的初始化顺序问题
- c++数据成员变量初始化顺序问题及特殊成员变量类型初始化
- C++成员变量的初始化顺序问题
- C++成员变量的初始化顺序问题
- C++成员变量的初始化顺序问题
- C++成员变量的初始化顺序问题