建構函式 析構函式是否可以定義為虛函式

2022-07-29 05:21:10 字數 325 閱讀 9669

從儲存空間角度:

虛函式是通過虛函式表來實現多型的,虛函式表實際是儲存在物件的記憶體空間的。如果建構函式是虛函式,就需要通過虛函式表來呼叫,可是物件還沒有例項化,無法找到虛函式表,所以建構函式不能使虛函式

從使用角度看:

虛函式的作用在於通過父類的指標或者引用來呼叫它的時候能夠變成呼叫子類的那個成員函式。而建構函式是在建立物件時自動呼叫的,不可能通過父類的指標或者引用去呼叫,因此也就規定建構函式不能是虛函式。

在多型中,當用子類物件例項化父類指標時,delete父類指標時,如果基類的析構函式不是虛函式時,只會執行基類的析構函式,而不會執行子類的析構函式,派生類的部分釋放不掉。

C 建構函式和析構函式是否可以繼承?

先看乙個例子 include class a 建構函式不能為 virtual a int aa a aa virtual a public int a class b public a b int bb b bb b int aa,int bb a aa b bb b public int b cl...

C 建構函式和析構函式是否可以繼承?

先看乙個例子 cpp view plain copy include class a 建構函式不能為 virtual a int aa a aa virtual a public int a class b public a b int bb b bb b int aa,intbb a aa b b...

析構函式定義為虛函式

析構函式執行時先呼叫派生類的析構函式,其次才呼叫基類的析構函式。如果析構函式不是虛函式,而程式執行時又要通過基類的指標去銷毀派生類的動態物件,那麼用delete銷毀物件時,只呼叫了基類的析構函式,未呼叫派生類的析構函式。這樣會造成銷毀物件不完全。include include class cpers...