copy構造函式呼叫時機4,函式返回值是匿名物件

2021-07-25 21:25:55 字數 1135 閱讀 6149

傳智掃地僧課程學習筆記。

#include using namespace std;

class location

//copy建構函式 完成物件的初始化

location(const location & obj) //copy建構函式

~location()

int getx () int gety ()

private : int x , y ;

} ;//g函式 返回乙個元素

//結論1 : 函式的返回值是乙個元素 (複雜型別的), 返回的是乙個新的匿名物件(所以會呼叫匿名物件類的copy建構函式)

////結論2: 有關 匿名物件的去和留

//如果用匿名物件 初始化 另外乙個同型別的物件, 匿名物件 轉成有名物件

//如果用匿名物件 賦值給 另外乙個同型別的物件, 匿名物件 被析構

////你這麼寫**,設計編譯器的大牛們:

//我就給你返回乙個新物件(沒有名字 匿名物件)

location g()

//void objplay2()

//void objplay3()

{ //用匿名物件初始化m 此時c++編譯器 直接把匿名對轉成m;(扶正) 從匿名轉成有名字了m

location m = g();

printf("匿名物件,被扶正,不會析構掉\n");

cout<

location b = g();

此時直接轉正,

location b;

b = g();

此時返回值賦值乙份給b,g()本身返回的析構,

這種方式最好不用,要麼就直接初始化,像上面那樣,否則浪費一次拷貝構造和析構,

objplay2()中,

呼叫拷貝建構函式,產生匿名物件,

然後又沒人接,

所以又析構掉,

所以會有2次析構,

copy 賦值建構函式的4種呼叫時機or方法

第一種呼叫方法 demo include using namespace std class text text int a 有引數建構函式 text int a,int b 有引數建構函式,有三種呼叫方法 賦值建構函式,也叫copy建構函式 text const text obj text voi...

C 拷貝構造函式呼叫時機

class a 傳入乙個字串代表變數的名字 a string n name n a 拷貝建構函式a const a a 過載 運算子 a operator const a a friend ostream operator ostream os,const a a private string na...

複製建構函式的呼叫時機

每日心得 獨上高樓,望盡天涯路 日期 12.14 學習內容 複製建構函式的呼叫時機 重點 1 用已知變數 去複製 新定義的變數 2 值傳遞的方式給函式引數傳值 3 以值的方式返回區域性物件 4 呼叫複製建構函式後,系統不提供預設建構函式 定義類的時候,需要構造和複製都有 include using ...