近日讀林銳的《高質量C++編程》,作如下學習筆記。
(一)每個類只有一個析構函數和賦值函數,卻可以有多個構造函數。
(二)C++編譯器會為每個類添加一個無參構造函數,析構函數,賦值函數,拷貝構造函數。
(三)缺省的拷貝函數,和賦值函數采用位拷貝的方式,而不是值拷貝。類中含有指針變量時容易出錯。
(四)構造函數的初始化表。必須在派生類的初始化表中調用基類的構造函數,類中const常量也必須在類的初始化列表賦值,類成員的初始化可以在初始化表或者函數體內賦值的方式,這兩種方式的效率不完全相同。
(五)構造從類的最根出開始,先調用基類的構造函數,然后調用成員對象的構造函數。析構的順序與之相反。成員變量的初始化順序又定義的順序決定,而不是在初始化列表的順序決定的。
(六)拷貝構造函數在對象創建時調用,賦值函數只能被已經存在的對象條用。 賦值函數中必須檢查是否自賦值。注意不要把
if(this == &other)
寫成 (*this == other)
自己不想寫這兩個函數,又不讓別人調用,可以把它們聲明為private。
(七)編寫派生類的賦值函數,不要忘記對基類的成員重新賦值。Base::Operate= (other)