c 中解構函式在成員函式中的呼叫問題

時間 2021-09-04 02:33:22

1樓:

因為第二種方法你沒有定義拷貝建構函式,所以ab operator = (int a)執行完之後,返回的是return *this,會在記憶體中再次構造一個ab的物件,並且把*this指向的物件按位拷貝給這個物件,建立這個物件的時候,會用到x=new int[2]分配一段記憶體。由於有a=3;會再次呼叫按位拷貝函式把這個物件幅值給a,賦值完成後,這個物件析構,所以它的成員被重置為隨機數,a中x所指向的也為隨機數(因為是按位拷貝的)所以輸出為隨機數。你可以把ab operator = (int a)這個函式的返回值改為引用型別,就可以輸出不是隨機數,即:

ab& operator = (int a)

2樓:匿名使用者

賦值運算子改為:

ab& operator = (int a)就ok了。

賦值運算子的返回值不是引用的話,return *this;時會呼叫隱式拷貝建構函式:

ab(const ab &t)

生成類ab的臨時物件,臨時物件析構時,臨時物件的x[0]變為隨機數,因為物件a的x和臨時物件的x的值是一樣的,所以a.x[0]也變為隨機數了。物件a也析構了一次,所以析構了兩次。

c解構函式何時呼叫,C 解構函式何時呼叫

建構函式是建立的時候也就是new的時候呼叫,析構是釋放也就是delete的時候呼叫,你new的話應該是呼叫建構函式 也就是 date date int i 程式第39行,people的建構函式裡面有一行date birthday 1 建立了一個date類的臨時變數。當函式退出的時候,這個變數也會被撤...

解構函式的呼叫,解構函式在何時呼叫

在vc中除錯的話,你可以主動刪除物件,這樣就會呼叫解構函式int main 修改為int main 如樓上所說,如果你的程式視窗是在程式執行後立即關閉的話,你肯定看不到呼叫解構函式的資訊.因為解構函式的呼叫是在main結束後,也就是system pause 執行後,而不是你想像的那樣先呼叫,然後再執...

c中建構函式與解構函式的問題,C 中建構函式與解構函式的問題

你的getname函式在 你的類定義中只有getscore和getid c 關於建構函式和解構函式呼叫次數的問題 沒問題啊。引數傳遞的時候第一次拷貝構造呼叫,在函式返回的時候賦值給c2 再次呼叫了拷貝構造。析構的話 c1 c2 c 三次 傳遞引數和返回引數各一次拷貝建構函式,所以是2次 有兩個物件c...