首先,先來解釋一下幾個概念:複製建構函式、析構函式
複製建構函式:是一種特殊建構函式,具有單個形參,該形參(常用const修飾)是對該類型別的引用。當定義乙個新物件並且對他初始化的時,將顯示使用複製建構函式。當將該型別的物件傳遞給函式或者從函式返回該型別的物件的時候,將隱式的使用複製建構函式。
析構函式:是建構函式的互補當,當物件超出作用域或者動態分配的物件被刪除時,將自動應用析構函式。析構函式可用於釋放物件時構造或在物件宣告週期中所獲取的資源。不管類是否定義了自己的析構函式,編譯器都會自動執行類中非static成員的析構函式。
通常,編譯器會自動的幫我們合成這些複製建構函式是非常精煉的----他們只做必須的工作。但是對某些類而言,依賴於預設定義會導致災難。實現複製構造操作最困難的部分是最困難的部分,往往在於識別何時需要覆蓋預設的版本。有一種特別常見的情況需要類定義自己的複製控制成員的:類具有指標成員。
何時呼叫析構函式:動態分配的物件只有在指向該物件的指標被刪除的時候才會撤銷。如果沒有刪除指標指向動態物件的指標,則不會執行該物件的析構函式,兌現過就會一直存在,從而導致記憶體洩露,而且,物件內部使用的任何資源也不會釋放。
何時編寫析構函式:許多類不需要編寫析構函式,尤其是具有建構函式的類不一定需要定義自己的析構函式。僅有些工作需要析構函式完成時,才需要析構函式。析構函式通常用於釋放在建構函式或者物件生命週期內獲取的資源。如果類需要析構函式,則它也需要賦值操作符和複製建構函式,這是乙個有用的經驗法則。這個規則常稱為三法則,指的是如果需要析構函式則需要所有的這三個複製控制成員。
析構函式不僅僅用來釋放資源。一般而言,析構函式可以執行任意操作,該操作是設計者希望在該類物件的使用完畢後執行的。
C 建構函式 析構函式 複製建構函式
無聊的廢話 距離開始放假已經過去半個月了,這半個月,品讀了一本實用型的繪畫書籍,作了幾幅作品,又做了乙個模型,只是探索未知領域總會遇到各種問題,甚至難以解決的問題,筆者頹廢了兩天煲了一部劇,覺得自己深深的辜負了時間,決定動手總結一下學過的知識,主要是總結資料結構,不過筆者看到當初c 的筆記,決定再鞏...
建構函式,複製建構函式和析構函式
這些函式在網上很容易就可以查到定義和寫法,這裡就不贅述了。令人感興趣的是這些函式什麼時候執行,特別是複製建構函式和析構函式。用編寫的一段 很醜的 來說明。include include include class point point const point obj point double ge...
建構函式 複製建構函式和析構函式的作用
建構函式 複製建構函式和析構函式是c 類中系統會預設建立的三個成員函式。建構函式 該類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫建構函式,由其完成成員的初始化工作。建構函式可以有多個過載。複製建構函式被呼叫的三種情況 1.函式形參,呼叫函式時 2.函式返回值為形參時 3.乙個物件通過另乙個...