4 7 5 虛析構和純虛析構

2021-10-02 11:35:48 字數 863 閱讀 6679

多型使用時,如果子類中有屬性開闢到堆區,那麼父類指標在釋放時無法呼叫到子類的析構**

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

virtual

~類名(

)

virtual

~類名()=

0;

#include

#include

#include

#include

using

namespace std;

class

animal

virtual

~animal()

//如果父類的析構不是虛函式,走的還是父類的析構※※※

virtual

void

speak()

=0;}

;class

cat:

public animal

~cat()

}virtual

void

speak()

string *m_name;};

intmain()

class

animal

//純虛析構

virtual

~animal()

=0;virtual

void

speak()

=0;}

;//需要具體實現,父類有屬性開闢在堆區

animal::

~animal()

虛析構和純虛析構

多型使用時,如果子類有屬性開闢到堆區,那麼父類指標在釋放時無法帶呼叫到子類的析構 解決方式 將父類的析構函式改為純虛析構或者虛析構 1.可以解決父類指標釋放子類物件 2.都必須要有具體的函式實現 虛析構和純虛析構的區別 如果是純虛析構,該類屬於抽象類,無法例項化物件 include include ...

虛析構 純虛析構

析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。從高到低依次析構 因為在c 中,當乙個派生類物件通過使用乙個基類指標進行刪除 b a a a new b delete a 而這個基類有乙個非虛的析構函式,則結果是未定義的...

12 7 6 虛析構和純虛析構

多型使用時,如果子類中有屬性開闢到堆區,那麼父類指標在釋放時無法呼叫到子類的析構 這樣子類中的堆區資源無法釋放。解決方式 將父類中的析構函式改為虛析構或者純虛析構 虛析構和純虛析構共性 虛析構和純虛析構區別 我們來看之前的乙個案例 class animal animal class cat publ...