关于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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值