關於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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章