從乙個例子講解拷貝建構函式與return

2022-04-29 10:33:08 字數 978 閱讀 2188

1 #include "

iostream"2

using

namespace

std;34

5class

location

613 location(const location & p) //

複製建構函式

1417 ~location()

1821

int getx() int gety()

22private: int

x, y;

23};

2425

//alt + f8 排版

26void

f(location p)

2730

31location& g()

3236

37void

mainobjplay()

3842

43void

main()

44當g()返回的並非是引用時

首先建立b這個物件, 呼叫b物件的建構函式

然後呼叫g()函式,跟著建立a物件的函式

重點來了,接下來是return a,

在return a的時候,c++編譯器,首先將建立乙個匿名物件,然後用a物件去初始化這個匿名物件,這個時候就會呼叫匿名物件的拷貝建構函式(俗稱return副本),接著a析構,g()函式返回

在b接收到g()函式返回的匿名物件之後(=號操作符之後 c++編譯器規定),匿名物件析構,最後是b析構.

假設g()返回的是引用,在return a的時候,結果如下

猜測於a是在棧區(臨時區),函式返回時要釋放掉這塊記憶體,所以a將自己移動到另一塊記憶體區域,不影響編譯器**記憶體,最後由b來接收.

從乙個例子中去體會純虛函式的用法

華清遠見嵌入式學院 講師。首先先請大家來看下面的一段 include using namespace std class shape class point public shape float gety const virtual void shapename const friend ostre...

從乙個例子說為什麼要用介面

如題,看看下面這個例子 現有狗 和企鵝兩個類 狗會玩飛碟,企鵝會游泳,為什麼要把玩飛碟和游泳的方法分別定義在兩個介面裡?如果 定義在介面反而顯得 更加累贅,因為還多了兩個介面。你可能會想,幹嘛不直接把玩飛碟的方法直接定義在狗類中,游泳 的方法直接定義在企鵝類中 這種情況下沒有父類 假設這樣一種情況 ...

從一例子解析合成拷貝建構函式和拷貝建構函式

1 假定numbered是乙個類,它有乙個預設建構函式,能為每個物件生成乙個唯一的序號,儲存在名為mysn的資料成員中。假定numbered使用合成的拷貝建構函式成員,並給出如下函式 void f numbered s int numbered seq 0 void f numbered s 從 中...