1.析構函式可以為虛函式,且基類的析構函式一般均為虛函式。
原因在於:通過基類指標delete *base;時,可以通過虛的析構函式來釋放掉派生類獨自占用的記憶體,避免資源洩露。
2.建構函式不可為虛函式。
原因在於:建構函式是在物件完全構造之前執行的,在建構函式執行的時候,物件的動態型別還不完整。
構造乙個物件的時候,必須知道物件的實際型別,而虛函式行為是在執行期間確定實際型別的。而在構造乙個物件時,由於物件還未構造成功,編譯器無法知道物件的實際型別是該物件還是該類的乙個派生類物件,或者是更深層次的派生類。
虛函式的執行以來與虛函式表。而虛函式表在建構函式中進行初始化工作,即初始化vptr,讓他指向正確的虛函式表。而在構造物件期間,虛函式表還沒有被初始化,將無法進行。
虛建構函式和虛析構函式
建構函式不能是虛成員函式,但析構函式可以是虛成員函式。class a public a a class b public a public b b int main a ptr ptr new b delete ptr 上述new操作會使建構函式a b 均被呼叫,因為ptr是指向b的物件的指標,因此...
建構函式 析構函式 虛析構函式
說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...
C 建構函式 析構函式 虛析構函式
一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...