c++函數返回類對象時, 返回對象生命周期的研究


參考自: https://blog.csdn.net/RUN32875094/article/details/78462718

一般的函數返回的對象是個臨時對象, 在返回賦值語句完成后就會析構;  部分情況不會產生臨時對象 

 1 #include <iostream>
 2 class aaa
 3 {
 4 public:
 5     aaa(int a1)
 6     :a(a1)
 7     {
 8         printf("gouzao %d %x\n", a,this);
 9     }
10     aaa()
11     :a(0)
12     {
13         printf("gouzao1 %d %x\n", a, this);
14     }
15     aaa(const aaa &a1)
16         :a(a1.a)
17     {
18         printf("gouzao2 %d %x\n", a, this);
19     }
20     ~aaa()
21     {
22         printf("xigou %d %x\n", a, this);
23     }
24 public:
25     void print()
26     {
27         printf("aaaaa\n");
28     }
29     operator char*()
30     {
31         printf("adsfd\n");
32         return NULL;
33     }
34 
35     int a = 0;
36 };
37 
38 aaa GetObject()
39 {
40     aaa aa(10);
41     aa.a = 9;
42     return aa;
43 }
44 int wmain(int argc, wchar_t **argv)
45 {
46     printf("main start\n");
47     GetObject().print();// 返回臨時對象,該語句結束后, 返回臨時對象就會析構
48     char *aa = GetObject();// 返回臨時對象,這句話之后, 返回臨時對象就會析構, 之后aa就會成為也指針
49     aaa a1 = GetObject();// 不返回臨時對象, GetObject()內部的aa對象作為參數傳給a1的拷貝構造函數
50     printf("main end\n");
51     system("pause");
52     return 0;
53 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM