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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

匿名对象的生命周期

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 匿名对象的生命周期 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

調用構造函數可以生成匿名對象

//對象做函數參數 //1 研究拷貝構造 //2 研究構造函數,析構函數的調用順序//總結 構造和析構的調用順序#include <iostream> using namespace std;class ABCD { public:ABCD(int a, int b, int c){this->a = a;this->b = b;this->c = c;printf("ABCD() construct, a:%d,b:%d,c:%d \n", this->a, this->b, this->c);}~ABCD(){printf("~ABCD() construct,a:%d,b:%d,c:%d \n", this->a, this->b, this->c);}int getA() {return this->a;} protected: private:int a;int b;int c; };class MyE { public:MyE():abcd1(1,2,3),abcd2(4,5,6),m(100){cout<<"MyD()"<<endl;}~MyE(){cout<<"~MyD()"<<endl;}MyE(const MyE & obj):abcd1(7,8,9),abcd2(10,11,12),m(100) //在拷貝構造函數中也要有初始化列表{printf("MyD(const MyD & obj)\n");}protected://private: public:ABCD abcd1; //c++編譯器不知道如何構造abc1ABCD abcd2;const int m; //常量要在初始化列表中進行初始化};int doThing(MyE mye1) //在調用的時候對調用copy構造函數 《==》MyE mye1 =參數調用copy構造函數 {printf("doThing() mye1.abc1.a:%d \n", mye1.abcd1.getA()); //這種情況下是一個類中有另一個類的變量return 0; }int run2() {MyE myE;doThing(myE); // 執行這個過程會調用 return 0; }// int run3() {printf("run3 start..\n");//匿名對象可以理解為臨時對象 一般系統自動的生成 如果一個函數返回一個對象 這個對象再返回時會生成一個臨時對象//咋執行此代碼的時候 利用構造函數生成一個匿名對象 執行完此行代碼 //因為沒有外部接此匿名對象的變量 此匿名對象又被析構 ABCD(400, 500, 600); //臨時對象的生命周期 就在這一行// ABCD abcd = ABCD(100, 200, 300);//若直接調用構造函數呢?//想調用構造函數對abc對象進行再復制,可以嗎?//在構造函數里面調用另外一個構造函數,會有什么結果?printf("run3 end\n");return 0; }int main() {//run2();run3();system("pause");return 0; }

//對象做函數參數 //1 研究拷貝構造 //2 研究構造函數,析構函數的調用順序//總結 構造和析構的調用順序#include <iostream> using namespace std;class ABCD { public:ABCD(int a, int b, int c){this->a = a;this->b = b;this->c = c;printf("ABCD() construct, a:%d,b:%d,c:%d \n", this->a, this->b, this->c);}~ABCD(){printf("~ABCD() construct,a:%d,b:%d,c:%d \n", this->a, this->b, this->c);}int getA() {return this->a;} protected: private:int a;int b;int c; };class MyE { public:MyE():abcd1(1,2,3),abcd2(4,5,6),m(100){cout<<"MyD()"<<endl;}~MyE(){cout<<"~MyD()"<<endl;}MyE(const MyE & obj):abcd1(7,8,9),abcd2(10,11,12),m(100) //在拷貝構造函數中也要有初始化列表{printf("MyD(const MyD & obj)\n");}protected://private: public:ABCD abcd1; //c++編譯器不知道如何構造abc1ABCD abcd2;const int m; //常量要在初始化列表中進行初始化};int doThing(MyE mye1) //在調用的時候對調用copy構造函數 《==》MyE mye1 =參數調用copy構造函數 {printf("doThing() mye1.abc1.a:%d \n", mye1.abcd1.getA()); //這種情況下是一個類中有另一個類的變量return 0; }int run2() {MyE myE;doThing(myE); // 執行這個過程會調用 return 0; }// int run3() {printf("run3 start..\n");////匿名對象可以理解為臨時對象 一般系統自動的生成 如果一個函數返回一個對象 這個對象再返回時會生成一個臨時對象//咋執行此代碼的時候 利用構造函數生成一個匿名對象 執行完此行代碼 //因為沒有外部接此匿名對象的變量 此匿名對象又被析構 //ABCD(400, 500, 600); //臨時對象的生命周期 就在這一行//會將匿名對象直接轉換成 abcd這個對象//這樣做就相當于使用匿名對象給 abcd對象賦值但是 C++編譯器優化之后 直接就相當于 定義一個 abcd對象ABCD abcd = ABCD(100, 200, 300);//若直接調用構造函數呢?//想調用構造函數對abc對象進行再復制,可以嗎?//在構造函數里面調用另外一個構造函數,會有什么結果?printf("run3 end\n");return 0; }int main() {//run2();run3();system("pause");return 0; }

講一個匿名對象賦值給一個一個新生成的對象 那么匿名對象將會被直接轉換為 該對象 直到聲明的對象被釋放

總結

以上是生活随笔為你收集整理的匿名对象的生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。

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