函式返回物件的小揭秘

2021-08-25 20:08:56 字數 573 閱讀 8135

下面是一段c++**,你能知道執行的結果嗎?

#include
using namespace std;

class cpp_obj

cpp_obj(const cpp_obj& c)

cpp_obj& operator=(const cpp_obj& rhs)

~cpp_obj()

};cpp_obj return_test()

int main()

結果是:

ctor

ctor

before return

dtor

operator=

dtor

dtor

簡單分析,這裡困惑的主要是copy ctor。因為在return b的時候,函式會將臨時物件b拷貝給在main當中的乙個隱藏的物件,假設是temp,temp的位址&temp是return_test()的隱藏引數。然後用物件temp賦值給n,結束後會釋放temp,所以在列印出operator=之後出現dtor,最後乙個dtor是物件n的。

函式返回含有指標成員的物件

移動構造 淺層複製只實現物件間的資料元素一一對應,只複製成員函式中的指標位址,如下圖 pointarray2複製了pointarray1,只複製了指標,pointarray2與pointarray1指向了同一塊陣列元素,在執行後進行記憶體釋放時會先呼叫pointarray1的析構函式釋放陣列記憶體,...

C 函式返回物件為引用

當返回型別為引用時,我們可以用引用來接受,也可以用普通變數來接受。返回型別為普通型別時,例如int,被調函式結束的時候,會生成乙個臨時物件,然後return的內容拷貝給這個臨時物件。但返回型別為引用時,不會生成臨時物件。會直接返回物件。id 正確 id 錯誤,但是不會報錯 sw.setscore s...

c 返回函式區域性物件的引用

在上面的 中,最後能夠輸出正確的值,然而在函式getnode 中,str是乙個區域性的物件,記憶體空間在棧上,當函式退出時,str的記憶體空間被 這是在高階語言的層面上講的。但是為什麼最後的結果是正確的?原因就是node newnode getnode 這句呼叫的是預設的拷貝建構函式,如果是自己重新...