主要講了,
1. virtual析構函數的作用與調用順序
2. 使用時機,并不是使用了繼承就要把基類的析構函數變為虛函數(virtual),只有當用于多態目的時才進行一個virtual析構函數的定義。
3. 不要繼承那些沒有將析構函數定義為virtual的類來實現多態行為?
?
對于1:
有些類繼承可能只是一個組合的作用,這樣加入virtual析構函數就會使得類實例的空間占用增加(一個vptr)
?
對于2:
如果繼承確實是為了實現多態效果,那么最好定義一個virtual析構函數(自己認為,當不涉及到資源釋放,其實也沒必要進行定義,但是防范未然,因為已經使用了多態,那么vptr的存在就必不可少了,加入一個virtual析構函數并不會再引起類實例數據存放上的巨大變動)
?
對于3:
特別注意STL中的許多容器都要去繼承他們來實現多態,可能導致自己擴展的部分資源未被釋放(因為僅僅會調用基類的析構函數,而它恰恰不是virtual函數)