虛析構函式是為了解決這樣的乙個問題:基類的指標指向派生類物件,並用基類的指標刪除派生類物件」。
以下是兩個類的宣告,其中base類為基類,而derived類繼承自base類:
class base
{public:
base(){ cout<<"base constructor"《下面為相應的測試**:
base *ptr = new derived;
delete ptr;
上面測試**的輸出結果如下:
base constructor
derived constructor
base deconstructor
從上面的輸出結果可以看到,子類derived的析構函式並沒有被呼叫。若子類derived的析構函式裡面會做一些釋放資源操作的話,那麼析構函式裡面的**將會徒勞無功了,舉個例子,對於stl裡面的智慧型指標auto_ptr,所謂智慧型就是因為auto_ptr物件在結束生存期時,會在析構函式裡面自動呼叫delete操作以釋放所指向的記憶體空間,若auto_ptr因為某些公有的操作繼承自乙個沒有宣告虛析構函式的父類,那麼智慧型指標將不再智慧型了,隨之而來就是記憶體洩露問題了。
當然,並不是要把所有類的析構函式都宣告為虛函式。因為當編譯器發現類中有虛函式的時候,就會給類建立乙個虛表,用來存放每個虛函式的位址;同時編譯器會另外為每個類物件新增乙個虛指標,用於指向物件所屬類的虛表,這樣就會使得類物件占用了更多的記憶體空間。因此,當乙個類被用來作為基類的時候,才把析構函式宣告為虛函式。但眾所周知,現在普通pc機可用的記憶體空間越來越大了,也沒有人確定乙個類以後不會被繼承,為了安全起見,個人還是建議把類的析構函式都宣告為虛函式。
若將基類base的析構函式宣告為virtual,則上面的測試**將會得到以下正確的輸出結果:
base constructor
derived constructor
derived deconstrutor
base deconstructor
一些人,一些事,一些
我覺得這是國內it企業浮躁和傳統的官本位性質決定的,導致國內企業都本末倒置。要想改變命運,我覺得有以下出路 1.不做技術了,改做混混 混混的概念很廣泛的,比如銷售 經理 幹部 皮包公司之類其實都屬於這類。中國就是這樣,越浮越掙錢,只有混混才能發財。要不更進一步,做流氓,廣義的流氓,也很不錯。2.專心...
C 構造 析構的一些理解
wiki c 類 effective c 構造 析構 賦值運算子 構造 析構 賦值運算子 c 類四個預設函式 建構函式 析構函式 拷貝函式 賦值函式 建構函式 析構函式 拷貝函式 賦值函式 c 多個建構函式的問題 概要 在c 中,每乙個類都會有乙個或多個建構函式,乙個析構函式,乙個賦值函式。建構函式...
求職一些事
從參加校園招聘到社會招聘,本人羞愧的講,經歷過幾十場招聘會。成功率不高。當然隨著時間的推移,勝率越來越高。找工作不能著急,始終要相信自己沒問題的,可以找到滿足自己待遇的公司。面霸怕什麼,都是筆財富。第一次是在西安電子科技大學面試的,第一次嘛,所以想得太多,都買新衣服了,打扮得很得體,還主動秀了下英文...