**:
#include usingnamespace
std;
class
cbase
virtual ~cbase()
virtual
void something()
};class cderive : public
cbase
~cderive()
void something()
};int
main()
此時輸出的是:
do something in cderive
destructor of class cderive
destructor of class cbase
如果將cbase裡面的析構函式前面的virtual去掉,輸出結果卻為:
do something in cderive
destructor of class cbase
可以看出來子類cderive裡面的析構函式根本就沒有執行。關於這其中的玄機,暫時還沒有精力去研究,不過看了兩篇部落格大致明白了意思:
感覺很多東西必須知其所以然才行,期待寒假再跟著上面的博主研究透徹《c++物件記憶體布局》
基類虛析構函式
why虛析構函式?主要還是由於基類指標或引用可以不進行顯示型別轉換的情況下指向派生類物件。同時通過引用或者指標或引用呼叫方法時遵循 例如 定義了基類brass,派生類brassplus 如果viewacct 不是虛方法,則b1 ref.viewacct 和b2 ref.viewacct 均是使用br...
C 為什麼設定基類的析構函式為虛函式
物件的析構函式呼叫順序是從派生類到基類 那麼如果基類的指標指向派生類的物件 還能正常的執行析構順序嗎 下面看乙個類的宣告 cpp view plain copy class subject class concretesubject public subject 建立基類的指標 並刪除該物件 cpp...
建構函式不能是虛函式 基類析構函式必須為虛函式
1,從儲存空間角度 虛函式對應乙個虛表vtbl,可是這個vtbl其實是儲存在物件的記憶體空間的。問題出來了,如果建構函式是虛的,就需要通過 vtbl來呼叫,可是物件還沒有例項化,也就是記憶體空間還沒有,無法找到vtbl。所以建構函式不能是虛函式。vtbl是在編譯期就建立了,各個虛函式這時被組織成了乙...