C 虛函式 12 純虛析構函式

2021-07-02 20:19:55 字數 991 閱讀 2057

c++中析構函式能否為純虛函式?

可以!!c++中定義乙個純虛析構函式是合法的,並且最重要的一點是如果某個類包含純虛析構函式,則類必須給此函式定義函式體。

看起來這種現象很奇怪,純虛函式怎麼會需要定義函式體呢?但是,因為析構函式的呼叫順序總是與構造順序相反,這就意味著派生類的析構總是先被呼叫,然後再呼叫基類的析構。

如果純虛析構函式沒有給出定義,則物件析構時如何呼叫這個函式?因此,編譯器以及鏈結器強制規定純虛析構函式的函式體必須存在。

#include class base ;

class derived : public base

};int main()

linux平台(gcc 4.8.5 in centos 7.2):

in function `derived::~derived()':

(.text._zn7derivedd2ev[_zn7derivedd5ev]+0x2e): undefined reference to `base::~base()'

windows平台(visual studio 2015):

error lnk2019: 無法解析的外部符號 "public: virtual __thiscall base::~base(void)" (??1base@@uae@xz),該符號在函式 "public: virtual __thiscall derived::~derived(void)" (??1derived@@uae@xz) 中被引用

下面程式中,提供了純虛析構函式的定義,則程式編譯執行正常。

#include class base ;

base::~base()

class derived : public base

};int main()

執行結果:

~derived() is executed

pure virtual destructor is called

C 虛函式,純虛函式,虛析構和純虛析構

c 虛函式 定義為虛函式是為了允許用基類的指標來呼叫子類的這個函式,是需要具體實現的 virtual void funtion1 c 純虛函式 一 定義 純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函式的方法是在函式原型後加 0 vir...

C 虛析構函式 純虛析構函式

虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...

C 虛析構函式 純虛析構函式

虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...