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