c++中的虛析構函式到底什麼時候有用的,什麼作用呢。
總的來說虛析構函式是為了避免記憶體洩露,而且是當子類中會有指標成員變數時才會使用得到的。也就說虛析構函式使得在刪除指向子類物件的基類指標時可以呼叫子類的析構函式達到釋放子類中堆記憶體的目的,而防止記憶體洩露的。
兩段**:
#include using執行結果:namespace
std;
class
base
~base()
private
:
inta, b;
};class derive : public
base
~derive()
}private
:
int *pi;
};int main(void
)
inti;
cin >>i;
return0;
}
這段**中沒有使用虛析構函式,當刪除動態申請的物件時,只執行了基類的建構函式,而此時,子類裡面是有動態申請的記憶體的,那麼這就早成了記憶體的洩露。
1 #include 2執行結果:3using
namespace
std;45
class
base69
virtual ~base()
1013
private:14
inta, b;
15};
1617
class derive : public
base
1824 ~derive()
2532}33
private:34
int *pi;
35};
3637
int main(void)38
43int
i;44 cin >>i;
4546
return0;
47 }
從執行結果可以看到,這次執行了基類的析構函式,那麼就不會造成記憶體洩露了。
我的疑問:使用基類指標來操作子類物件實現了多型。也就說虛函式和指標組合實現了c++的多型性。但是那是子類函式與基類函式同名實現了重寫基類函式。而析構函式又不同名,難道也可以實現重寫麼?
是不是因為每個類的析構函式只有乙個,所以,c++內部對於析構函式做了特殊的處理,實現了所謂的重寫。
多型的實現是通過呼叫函式來實現的,但是delete是操作符,也可以麼?也就說操作符操作基類指標,也會根據指標指向的實際物件來呼叫相應的函式麼?
C 中虛析構函式作用
我們知道,用c 開發的時候,用來做基類的類的析構函式一般都是虛函式。可是,為什麼要這樣做呢?下面用乙個小例子來說明 有下面的兩個類 class clxbase virtual clxbase virtual void dosomething class clxderived public clxba...
C 中虛析構函式的作用
我們知道,用c 開發的時候,用來做基類的類的析構函式一般都是虛函式。可是,為什麼要這樣做呢?下面用乙個小例子來說明 有下面的兩個類 class clxbase virtual clxbase virtual void dosomething class clxderived public clxba...
C 中虛析構函式的作用
收藏 我們知道,用c 開發的時候,用來做基類的類的析構函式一般都是虛函式。可是,為什麼要這樣做呢?下面用乙個小例子來說明 有下面的兩個類 class clxbase virtual clxbase virtual void dosomething class clxderived public cl...