析構函數是否必須爲虛函數?爲什麼?

p517函數

在C++中,基類指針能夠指向一個派生類的對象。若是基類的析構函數不是虛函數,當須要delete這個指向派生類的基類指針時,就只會調用基類的析構函數,而派生類的析構函數沒法被調用。容易形成內存泄漏。spa

設計析構函數爲虛函數,主要是考慮到繼承。
當A爲基類,B爲A的繼承類,考慮以下狀況:
A *p = new B();
.....
delete p;
若是此時A的析構函數不是虛函數,那麼在delete p的時候就會調用A的析構函數,而不會調用B的析構函數,這樣就會形成B的資源沒有釋放。
而若是A的析構函數爲虛函數,那麼就會調用B的析構函數,一切正常。
設計

相關文章
相關標籤/搜索