構造 析構 虛函數

構造函數能否聲明爲虛函數


子類繼承父類,考慮到構造函數的順序,對於子類的構造,先是調用父類的構造函數生成父類數據結構,然後再調用子類定義的構造函數,補充其他初始化工作
而虛函數主要用在多態裏面,父類的指針或引用指向子類結構,相同的函數聲明,體現不同的實現過程,根本上是虛函數表指針機制決定的,虛函數表指針是虛函數的唯一入口
如果父類構造函數聲明爲虛函數,子類的構造函數和父類同名,那麼子類在構造的時候不會調用父類的構造函數,因爲聲明爲虛函數嘛,那麼父類的構造將沒有執行,父類都沒有構造,子類如何生成呢?就像是基礎沒打,就直接空中樓閣了

構造函數能否調用虛函數


構造一個子類時,會先調用父類的構造函數,如果構造函數裏面調用了虛函數,因爲虛函數的多態性,實際上這個虛函數又會走到子類的這個函數定義中去,然而子類還沒有構造,還沒有初始化啊,相當於調用了一個還沒初始化的對象,產生矛盾

析構函數能否聲明爲虛函數,即虛析構


有些類的構造有內存申請,析構函數要釋放申請的內存,如果不用析構,比如一個子類對象賦給一個父類指針,父類指針調用析構時,將只調用父類的析構部分,造成子類內存泄露,虛析構函數的多態性能解決這個問題
動態內存管理的特性決定了必須要用多態實現,必須要用虛析構函數

析構函數能否調用虛函數


如果析構函數調用了虛函數,當子類析構時,會先析構子類的部分數據,然後調用父類的析構函數,這裏面的虛函數又會走到子類中去,然後子類部分已經先析構了呀,矛盾

發佈了45 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章