最近查看了關於c++構造函數的博客,爲了防止關鍵知識的遺忘,特此記錄一些要點,以便於從此的查閱。c++
若是不主動書寫構造函數,c++或默認提供通常構造函數,拷貝構造函數以及複製運算符的操做。
通常的構造函數沒有任何參數,默認提供的該種構造函數不執行任何操做
默認提供的拷貝構造函數簡單的將成員變量賦值
默認提供的複製運算也是簡單的將成員變量賦值
假設有類A,3種初始化方法在代碼中表現以下
A a(); 通常的構造函數(帶參數的通常構造函數能夠視做對a的重載)
A a(b); 拷貝構造函數
A a = c; 賦值運算
值得注意的是 若是有動態分配的類成員 那麼應該重載拷貝構造函數和賦值運算符
主要是因爲,默認的考培構造和=運算符都是簡單的進行成員的複製,這樣會致使兩個對象的成員同時指向一塊內存區域,兩個成員粘滯在一塊兒,改動了其中一個,另外一個也會發生改變。因此必須重載這個函數以及運算符,保證每一個對象的成員(動態分配)都有本身獨立的空間。
關於如何對賦值運算符進行重載, 會在另外一篇中記載函數