條款7 為多型基類宣告virtual析構函式

2021-08-28 21:36:36 字數 624 閱讀 6186

1.將析構函式宣告為virtual

當我們的類要作為基類的時候我們最好將其析構函式宣告為virtual型別,因為當我們用基類的指標指向乙個派生類,當我們要用基類指標析構掉這個派生類的時候,如果基類的析構函式不是virtual,那麼最終只有基類裡面宣告的變數被析構掉,而派生類裡面的變數很可能沒被析構掉,這會導致記憶體洩漏問題。當我們將基類設定為virtual的時候我們利用基類指標進行析構時,基類析構函式會被先呼叫,然後呼叫派生類的析構函式。這樣能保證所有的變數被析構掉。

2.將基類的函式實現宣告為virtual

當我們在派生類重寫了乙個基類的函式時,我們最好將基類的該函式宣告為virtual,因為這樣當我們用基類指標指向該派生類時,我們能夠區分到底是呼叫基類的該函式還是派生類裡面的該函式,是因為,當我們將該函式宣告為virtual的時候,我們的類中將被分配乙個vptr函式指標,指向每個基類和派生類中該被重寫函式,然後我們根據基類指標指向的派生類呼叫該派生類的重寫函式。

3.將析構函式不是virtual的類作為基類進行派生是不明智的。

我們要將乙個類作為基類,一般會構造乙個全虛函式,這樣頗為遍便利。

class awov
如果不是為了多型用途和作為base class就不要宣告virtual。

條款7 為多型基類析構函式宣告為virtual

基類指標指向子類物件。子類物件必須位於堆。因此為了避免洩漏記憶體資源,當指標不使用時,delete掉每乙個物件非常重要。但是如果基類的析構函式不宣告為virtual。那麼指向子類物件的指標delete時,析構掉的成分都是基類的,而子類的成分沒有被識別出來,而未被析構掉。這樣就造成資源浪費。給基類析構...

條款7 為多型基類 宣告virtual析構函式

1 c 明確指出,當派生類物件經由乙個base class指標被刪除,而該base class帶著乙個non virtual析構函式,其結果未有定義 實際執行時通常發生得是子類物件得derived成分沒有被銷毀,消除這個問題得做法很簡單,給base類乙個虛擬構函式,此後刪除派生類物件就會如你想要得那...

條款7 為多型基類宣告virtual析構函式

現在需要一種設計,要設計乙個類記錄時間,但是記錄時間的方式有很多,可以通過手機mobileclock,可以通過水鐘waterclock等。所以要這種實現的方式 class timekeeper class mobileclock public timekeeper class waterclock ...