2014-02-14 54 views
2

什麼是用C++寫虛析構函數,這樣的用法:虛擬析構函數的用法是什麼?

class CMyObject 
{ 
    CMyObject(void) {}; 
    virtual ~CMyObject(void) {}; 
} 
+0

[何時使用虛擬析構函數?](http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors) – songyuanyao

回答

1

所以,你可以有不同的破壞規模(和解除)正確的CMyObject子類對象的數組。

1

虛擬析構函數允許CMyObject的子類覆蓋~CMyObject(void)並正確地清除它擁有的任何附加屬性。例如,如果將CMyObject擴展爲擁有指向某個數組的指針,併爲該數組分配內存,則必須在子類的析構函數中清理它,因爲它不會由析構函數處理的超類(CMyObject)。

1

簡單的例子:

class Foo {}; 
class Bar : Foo {}; 

Foo * obj = new Bar(); 
delete obj; 

在這種情況下,在不富虛析構函數,酒吧的析構函數不會被調用,這是嚴重的問題。

+0

因此,如果沒有CMyObject的派生類,我總是確保CMyObject * p和p = new CMyObject,然後將析構函數聲明爲NON virtual是OK? – alancc

+0

@ user2704265是的,這是真的。大拇指的規則是爲接口聲明虛擬dtor。 – Bogdan

相關問題