用虛析構函式與不用的對比

2021-10-09 03:59:47 字數 590 閱讀 4318

#include

using

namespace std;

/*虛析構函式

為什麼需要虛析構函式?

可能通過基類指標刪除派生類物件;

如果你打算允許其他人通過基類指標呼叫物件的析構函式(通過delete這樣做是正常的),

就需要讓基類的析構函式成為虛函式,否則執行delete的結果是不確定的。

*//*

乙個不使用虛析構函式的例子

class base ;

base::~base()

class derived: public base;

*///用了虛析構函式的例子

class

base

;base::

~base()

class

derived

:public base

;derived::

derived()

derived::

~derived()

void

fun(base* b)

intmain()

虛析構函式與非虛析構函式問題!

class a class b public a int main 這種情況下,輸出結果我們都知道,是先執行子類的析構函式,後執行父類的析構函式,所以輸出是 b 和 a class a class b public a int main 這種情況下,我是記住了,析構函式在執行的時候,只有乙個執行,但...

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

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

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

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