C 構造與析構 11 析構函式的行為

2021-07-02 19:46:24 字數 852 閱讀 2935

#include using namespace std;

int i;

class a};

int foo()

int main()

<

上述程式的輸出結果:

i = 3

為何結果是3,而不是10?

當從乙個函式返回時,析構函式屬於乙個最後才被執行的方法。當i值已經拷貝給函式的返回值(return value)之後,ob的析構函式才會被呼叫。

因此,在析構函式將i值修改為10之前,foo就已經獲取到了i的當前值3,因此輸出為i = 3。

如何使得程式可以輸出i = 10?

可以使用下面的幾種方法:

#include using namespace std;

int i;

class a};

int& foo()

int main()

#include using namespace std;

int i;

class a};

int foo()

return i;}

int main()

因為物件ob是在塊中建立的,則塊作用域結束時,會呼叫物件ob的析構函式,此時i值會被修改為10。最後做為返回值進行返回。

int foo()

int foo()

注意:使用此方法,編譯時需要帶上--no-elide-constructors選項。

C 建構函式 析構函式 虛析構函式

一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...

c 構造與析構函式

一.建構函式與析構函式 1 c 中的類可以定義與類名相同的特殊成員函式,這種函式叫做建構函式。2 建構函式在定義時可以有引數。3 沒有任何返回型別的宣告。4 一般情況下系統會自動呼叫,在一些情況下會收手動呼叫。建構函式有無參構造,有參構造,賦值 拷貝建構函式。include using namesp...

建構函式 析構函式 虛析構函式

說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...