2015-05-27 71 views
2

正如我所知在cpp,當我們刪除一個對象或當主要完成時,所有對象的析構函數將被調用。對於類型爲child的對象,首先調用子類的析構函數,然後調用父類的析構函數。
現在我很困惑。因爲如果允許使用純粹的虛擬析構函數,那麼當我們刪除一個類的子對象時它怎麼會被調用呢?它不是調用純虛擬父類的析構函數嗎?爲什麼有可能使析構函數純虛擬

+0

在基類中的純虛析構函數迫使任何派生類實現析構函數,所以如果你有一個指向基類,並刪除它,然後再派生類析構函數被調用 – EdChum

+0

@TartanLlama感謝 – Yves

回答

4

是的,基類的析構函數被調用。這意味着它必須必須有一個實現。可以爲任何純虛函數提供實現,包括析構函數。例如:

struct foo 
{ 
    virtual ~foo() = 0; // pure virtual dtor 
}; 

foo::~foo() {} // implementation 

純虛擬析構函數的用例是確保沒有任何其他純虛擬方法的類不能被實例化。

+0

這樣一個純虛函數只有在它是析構函數時才能實現它的實現? – Yves

+3

@Thomas不,其他純粹的虛擬成員函數*可能也有實現,但是析構函數*必須*。我會澄清這一點。 – juanchopanza

+0

非常感謝。我被一本愚蠢的書誤導了。 – Yves

相關問題