日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

返回值与返回引用的问题

發布時間:2024/1/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 返回值与返回引用的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

此處小論一下返回值與返回引用的問題。
先看程序:

#include <iostream> using namespace std;class X {int i; public:X(int ii = 0);~X();void modify(); };X::X(int ii) {i = ii;cout<<"constructor "<< this->i <<endl; }X::~X() {cout<<"destructor "<< this->i <<endl; }void X::modify() {i++; } #if 0 X& f5() //此處返回的是X類的引用,當函數結束,調用析構函數,釋放內存。 {return X(20); //其實,仍然是在強調,不能返回局部變量的引用。。函數結束,變量消失,引用無意義。 } #endif #if 1 X f5() {return X(20); //直接返回一個無名的X對象,調用了構造函數。但并未在該函數結束時調用析構函數。//沒有創建臨時對象,不釋放當前的無名對象。 } #endif void main() {X a(10);f5() = a; //因為C++默認提供=運算符重載,故此處不用自己寫重載函數即可實現對象之間的淺拷貝。淺拷貝。 }

?

易知:運行結果:
constructor? ?10
constructor? ?20
destructor? ?10
destructor? ?10
Press any key to continue
以上結果,因為調用的是返回值為對象而非引用的f5函數,該函數在結束時并未調用析構函數,故在最后接受了對象a的賦值。

當調用返回值是x類的引用時(將上述代碼中預處理 的 1 和 0 調換),可得結果:
constructor? ?10
constructor? ?20
destructor? ?20
destructor? ?10
Press any key to continue
由以上分析易知,在使用返回引用的時候,一旦函數結束,則對象不復存在,自動調用析構函數。
還是在強調同一個問題:不能返回局部變量的引用。

轉載于:https://www.cnblogs.com/kingDr/p/3422065.html

總結

以上是生活随笔為你收集整理的返回值与返回引用的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。