1. 程式人生 > 其它 >c++虛析構和純虛解構函式

c++虛析構和純虛解構函式

主要是為了解決多型使用時子類有屬性開闢到堆區的問題

解決方式:將父類中的解構函式改為虛析構或者純虛析構

虛析構和純虛析構共性:
可以解決父類指標釋放子類物件
都需要有具體的函式實現
虛析構和純虛析構區別:
如果是純虛析構,該類屬於抽象類,無法例項化物件

虛析構語法:
virtual ~類名(){}
純虛析構語法:
virtual ~類名() = 0;
類名::~類名(){}
產生原因是父類的指標在析構的時候,不會呼叫子類中的解構函式,導致如果子類中有堆區屬性,就會出現記憶體洩漏,解決方案就是把父類的解構函式改成虛析構,這樣子類就會呼叫自己的解構函式,然後父類在呼叫自己的解構函式。純虛析構也可以做到,不過注意,純虛析構也需要程式碼實現,不能是空的,因為父類中的堆區的刪除是通過父類的解構函式來處理的。
所以虛析構和純虛解構函式的注意問題就是父類刪除的時候會呼叫他們,所以他們需要宣告,也需要定義,其他包括不可例項化物件這些都是一樣的。 這些東西都是為了解決堆區用完後刪除的問題