基類指標指向子類物件。
子類物件必須位於堆。因此為了避免洩漏記憶體資源,當指標不使用時,delete掉每乙個物件非常重要。
但是如果基類的析構函式不宣告為virtual。那麼指向子類物件的指標delete時,析構掉的成分都是基類的,而子類的成分沒有被識別出來,而未被析構掉。這樣就造成資源浪費。
給基類析構函式宣告為virtual,那麼delete物件時,就會是你希望的那樣,它會銷毀整個物件,包括所有繼承類(drived class)的成分。
析構時呼叫順序:先呼叫最深層次的派生類的析構函式,依次向上呼叫base類的析構,最後呼叫最先定義的基類的析構函式。
條款7 為多型的基類宣告虛析構函式。
任何的類只要帶有乙個virtual函式那麼就集合可以確定其應該有乙個virtual析構函式。同樣的如果乙個函式不含有virtual函式,那麼通常意味著其不是乙個基類函式,而且為乙個不是基類的類宣告virtual的析構函式是十分糟糕的事情,不要這樣做。具體原因在下面 1.首先,想要實現出virtual...
條款7 為多型基類宣告virtual析構函式
1.將析構函式宣告為virtual 當我們的類要作為基類的時候我們最好將其析構函式宣告為virtual型別,因為當我們用基類的指標指向乙個派生類,當我們要用基類指標析構掉這個派生類的時候,如果基類的析構函式不是virtual,那麼最終只有基類裡面宣告的變數被析構掉,而派生類裡面的變數很可能沒被析構掉...
條款7 為多型基類 宣告virtual析構函式
1 c 明確指出,當派生類物件經由乙個base class指標被刪除,而該base class帶著乙個non virtual析構函式,其結果未有定義 實際執行時通常發生得是子類物件得derived成分沒有被銷毀,消除這個問題得做法很簡單,給base類乙個虛擬構函式,此後刪除派生類物件就會如你想要得那...