天天看點

【C++對象模型】函數傳回C++對象的問題

在深入C++對象模型中,對于形如

CObj obj1 = Get(obj2);

的形式,編譯器會在将其改變為如下

Get(obj, CObj&  obj1);

将指派操作符左邊的變量作為函數的一個引用參賽,在函數内部改變其值;

如下

傳回類對象的函數

main函數及執行結果

【C++對象模型】函數傳回C++對象的問題

上述代碼,構造函數被調用一次,拷貝構造被調用三次,重載的指派運算符沒有被調用;

調用時機:

構造函數:

CTest obj(10, 20);

拷貝構造函數:

①調用get函數時,将實參傳遞給get函數時,需要調用拷貝構造函數拷貝一個實參obj的副本

②get函數内部, CTest objTemp = obj;

③函數傳回之前,将objTemp的作為拷貝構造的參數拷貝構造obj2;

是以,get函數被改編為如下

是以,當函數的傳回值為類對象時,要注意其構造函數的編寫。