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