C 中建構函式與析構函式的執行順序

2021-06-19 21:32:18 字數 1107 閱讀 7392

今天在測試乙個建構函式和析構函式的用例的時候,發現我們所鍾愛的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,con

main

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...