虛析構函式的用處

2021-07-31 00:04:26 字數 1123 閱讀 5288

問:虛析構函式的作用是什麼?

答:用基類指標刪除派生類的物件時,讓派生類的析構函式可以被呼叫;

答案涉及到幾個重要資訊:

第一:基類指標,也就是說宣告的指標必須是基類或者是還有派生類的派生類,或者說一定不是最底層派生類;

第二:派生類的物件,生成的物件一定要是派生類的物件,如果new的物件本身就是宣告的類,那也沒必要用虛析構,浪費空間;

第三:派生類析構函式,只要滿足前面兩個條件資訊,基類的析構函式(確切來說是派生類物件的宣告類)一定要用虛析構函式;

虛析構函式,在基類和派生類之間,通過基類new乙個派生類物件,在後面析構的時候,如果基類的析構函式不為虛析構,將不會執行派生類的析構函式,如下:

結論:並不是每乙個類的析構函式都要寫成虛析構函式,因為這會給類增加儲存空間,只有當乙個類被用來做為基類,且例項化為派生類的時候才需要寫成虛函式;

也就是說如果用derived1 *pd = new derived1 ,這個時候就不需要寫虛構函式,但如果new derived2的話就必須將derived1的析構函式寫成虛析構,不然derived2的析構函式將不會執行,但不管是第一種情況還是第二種情況,base1的析構函式都會執行;

C 虛析構函式 純虛析構函式

虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...

C 虛析構函式 純虛析構函式

虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...

C 虛析構函式 純虛析構函式

虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...