把為類的成員變量賦值的工作盡量在構(gòu)造函數(shù)的初始化列表中,而不是放在構(gòu)造函數(shù)內(nèi)部進行。這兩種方法的差別主要是效率的差別,放在初始化表中,只有只有一個拷貝構(gòu)造函數(shù)調(diào)用,而放在構(gòu)造函數(shù)內(nèi)部有構(gòu)造函數(shù)和賦值函數(shù)兩個函數(shù)調(diào)用。
在初始化表中賦值,不僅能提高效率,而且還能和const常量的賦值統(tǒng)一起來,因為類的const常量賦值是在初始化表中。
當(dāng)有大量C++內(nèi)部數(shù)據(jù)類型變量時,用初始化反而不利,因為形式過于繁瑣,應(yīng)該設(shè)一個init()來統(tǒng)一進行初始化工作。
template<class t>
class namedptr {
public:
namedptr(const string& initname, t *initptr);
...
private:
const string& name; // 必須通過成員初始化列表進行初始化
t * const ptr; // 必須通過成員初始化列表進行初始化
};
而且,name是一個其名字成員在類外可以被修改而在內(nèi)部是只讀的對象。