堅持c++,真正掌握c++

我寫這樣的文章,當然是爲了自己日後方便自己查看,當作看書的筆記,也是爲了和廣大喜歡c++語言的同仁交流。幾天複習了c++primer的13章複製控制。從上一章中我們知道,如果我們不定義類的構造函數時,編譯器就會很友好的幫我們合成一個,那麼複製構造函數呢?首先複製構造函數的定義如class(const class&),複製構造函數和構造函數一樣也沒有返回值,但是複製構造函數具有一個該類類型的引用作爲單一形參,當我們定義一個新對象並用一個同類型的類對象對它進行初始化時,將顯式調用複製構造函數;當我們在一個函數中返回一個該類型的對象時,將隱式調用複製構造函數。如果我們沒有定義複製構造函數,那麼編譯器會爲我們創建一個合成的複製構造函數嗎?答案是會的。一般不定義類的複製構造函數和默認構造函數會侷限類的使用。複製構造函數還有一種簡單的實現方式:利用賦值操作符來實現。要定義賦值操作符,要簡單的瞭解下重載操作符。定義如下class operator=(const class &),其實複製構造函數和賦值是常在一起的,要定義複製構造函數的地方也一定需要賦值操作符。類當中還存在着一個特殊的函數:析構函數。析構函數和複製構造函數或者複製操作符之間的重要的區別是:即使我們定義了自己的析構函數,但是編譯器仍然會給我們合成一個析構函數,而且在運行時先執行用戶自己定義的析構函數,然後再運行合成的析構函數。析構函數的難點在於什麼時候需要定義析構函數,經驗告訴我們當我們的設計的類中存在着指針或者在堆上分配了內存的時候需要定義析構函數。
發佈了57 篇原創文章 · 獲贊 35 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章