多型也會存在一些問題
我們在釋放記憶體的時候 如果釋放的是父類的指標 那只會執行父類的析構函式~如果釋放的時候子類的指標那既會執行父類的析構函式也會執行子類的析構函式 這樣的話子類的空間如果申請了那會記憶體洩漏~
比如上面一篇中
在這裡面我們就沒有釋放circle的空間,如果**改進加入virtual 執行效果如下
virtual如此好用~但是他也會有一些限制
1、不能修飾普通函式
2、不能修飾全域性函式
3、不能修飾內聯函式
4、不能修飾建構函式
下面給出虛析構函式的例子
#include using namespace std;
class shape
{public:
shape()
{ cout<
下面我們就來講一下原理~
指標不只可以指向乙個物件 也可以指向乙個函式 當指標指向乙個函式的時候 指標會儲存函式入口的位址 然後一直執行下去
對我們的物件來說 例項化乙個物件指標的時候會有乙個虛函式表 虛函式表裡存著指向計算面積函式的入口 所以能正確的找到計算面積函式入口 能正確的執行函式
下面是circle沒有定義自己計算面積的函式的時候的位址
下面是circle定義自己計算面積的函式的時候的位址,也就是覆蓋
C 析構函式 虛析構函式
1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...