C 之一些事一些情 虛析構函式

2021-06-19 17:23:05 字數 1021 閱讀 4357

虛析構函式是為了解決這樣的乙個問題:基類的指標指向派生類物件,並用基類的指標刪除派生類物件」。

以下是兩個類的宣告,其中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 中,每乙個類都會有乙個或多個建構函式,乙個析構函式,乙個賦值函式。建構函式...

求職一些事

從參加校園招聘到社會招聘,本人羞愧的講,經歷過幾十場招聘會。成功率不高。當然隨著時間的推移,勝率越來越高。找工作不能著急,始終要相信自己沒問題的,可以找到滿足自己待遇的公司。面霸怕什麼,都是筆財富。第一次是在西安電子科技大學面試的,第一次嘛,所以想得太多,都買新衣服了,打扮得很得體,還主動秀了下英文...