C 之建構函式與析構函式

2021-06-02 08:05:12 字數 918 閱讀 9056

首先,在棧裡宣告兩個物件bs、sc,看看編譯器是如何自動呼叫的。

#includeusing namespace std;

class base

~base()

執行結果顯示:

first:

construct in base

second:

construct in base

construct in subclass

說明編譯器沒有呼叫析構函式,因為指向new出來的物件的指標沒有delete,可以通過分別增加兩個delete,來釋放資源;

void main()

執行結果:

first:

consttruct in base

second:

consttruct in base

construct in subclass

destructing base

destructing subclass

destructing base

end!

當然此處也可以不通過多次delete的方式來釋放資源,另外定義乙個函式

void del(base *p)

void main()

執行後發現,其實不然,當del(sc)後,並沒有先呼叫派生類的析構函式,再呼叫基類的析構函式,而是直接呼叫了基類的建構函式,這是為什麼呢?

當傳遞sc指標給del(base *p)時,由於析構函式並沒有定義為虛函式,所以在析構時,不能夠動態繫結。

因此,應將基類的析構函式定義為虛函式:

virtual ~base();

C 之建構函式與析構函式

最近在學習c 每次看到繼承這段的時候,總是一邊感慨這門語言的難度,一邊感慨這門語言的神奇之處。最近看到了建構函式這段,問了自己這樣乙個問題,建構函式可以是虛函式嗎?不是很清楚,於是去查了一些資料。首先我覺得應該明確的乙個問題就是,虛函式的功能是c 中多型的一種實現方式。主要是繼承類的某些功能和基類的...

c 之建構函式與析構函式

建構函式 建構函式的原型和函式頭有乙個特徵 雖然沒有返回值,但沒有被宣告為void,實際上建構函式不允許宣告型別的。例子 stock stock const char co,int n,doublem 當建立物件初始化賦值有兩種方式 1.stock food stock adsfdsa 1,5.0 ...

C 之建構函式與析構函式

c 中重要的是類的構造,對乙個事物抽象,得到其本質的東西 所謂本質,放之四海而皆準 類也無非對一些資料與函式的封裝。對於類中的建構函式 析構函式有其固有的特點。故總結如下 建構函式和析構函式是在類體中說明的兩種特殊的成員函式。建構函式是在建立物件時,使用給定的值來將物件初始化。析構函式的功能正好相反...