今天在測試乙個建構函式和析構函式的用例的時候,發現我們所鍾愛的vc6.0實在是bug問題越來越多,對於學習c++的新手來講,有必要在這裡給大家說明一下。
建構函式順序為:
全域性物件的建構函式;
main函式中物件的建構函式,包括automatic、static依次呼叫;
main中遇到函式中有區域性物件時,進入到函式中呼叫區域性物件的建構函式。
注:static物件的建構函式永遠只呼叫一次。
析構函式順序為:
退出函式時,執行函式內構造的automatic物件的析構函式,注:static物件不析構;
main函式中按構造的逆序析構automatic物件;
呼叫函式中定義的static物件的析構函式;
呼叫main中定義的static物件的析構函式;
最後呼叫全域性物件的析構函式。
注:復合中的構造、析構順序
構造:按宣告物件的順序來構造成員物件,而不是按照建構函式成員初始值列表中列出的順序;而且在包含它們的類物件(宿主物件)被構造之前構造。即:由內向外構造。
析構:按物件構造的逆序析構。對於復合物件,先析構主物件,再析構其包含的物件。
比如有以下的測試用例:
//#i nclude#i nclude
using namespace std;
class demo
~demo()
void main ()
程式執行的時候,在vc6 withsp6下執行的結果
id=4,conmain
id=2,con
id=3,con
funid=3,des
id=4,des
endmain
id=3,con
funid=3,des
id=4,des
id=8,con
id=2,des
//id=4,des //在用的時候才有此句輸出
其中包含有注釋的部分,為調整包含的標頭檔案為的情況下才有的輸出。如果使用 命名空間的std的話,沒有最後的一句輸出。
C 中建構函式與析構函式
建構函式主要功能 在建立物件的時候,給物件變數賦值。析構函式主要功能 當物件脫離其作用域時 例如物件所在的函式已呼叫完畢 系統自動執行析構函式,在此物件撤銷的時候釋放所占用的資源 在建立乙個類的物件時,首先呼叫建構函式對這個物件進行初始化。當這個物件的生命週期結束時,呼叫析構函式。例如,定義了乙個類...
C 中的建構函式(構造器)與析構函式(析構器)
該文章的程式 是按繼承中的基類子類來寫的。跟基本的建構函式與析構函式一樣。只是加了一丟丟東西。現在我們直奔主題!c 建構函式和析構函式主要負責構建物件和銷毀物件,在構建物件的時候系統自己呼叫類中的建構函式。在物件作用域結束後,呼叫析構函式銷毀物件。一般來說,建構函式用來完成事先的初始化和準備工作 申...
c 中的建構函式與析構函式
1 宣告和定義乙個建構函式 1.1 宣告乙個建構函式 建構函式沒有返回值型別 建構函式的名稱必須與類名稱相同 如 class student 呼叫該建構函式,將會為類分配記憶體空間,分配的記憶體空間主要是根據 成員變數的大小和成員函式的大小進行分配。1.2 顯式和隱式的呼叫建構函式 顯式呼叫 stu...