預設拷貝建構函式

2021-07-11 18:38:25 字數 543 閱讀 7530

1.什麼時候用到拷貝建構函式?

以乙個已經存在的物件初始化同型別的另乙個物件時,如:

class a; a a; a aa(a);

作為函式引數時,產生臨時物件,呼叫拷貝建構函式進行初始化

void fun(a a);

作為函式返回值時,產生臨時物件

a fun(){

a a;

return a;//產生臨時物件,並呼叫拷貝建構函式初始化

2.如果沒有定義 拷貝建構函式怎麼辦?

分兩種情況:

只對 data member 進行簡單的複製,如果存在乙個指標成員,並動態分配了記憶體,這時兩個物件共享一塊記憶體,

但程式可能並不知情,如果乙個做了釋放而另外乙個物件還在使用,就出現了問題。這時就需要 「深拷貝

編譯器為其合成乙個複製建構函式

3.什麼情況下不具有位拷貝語義?

對於前兩種情況,編譯器要將物件成員或基類的拷貝建構函式 安插到被合成的拷貝建構函式中。

拷貝建構函式,預設拷貝建構函式

拷貝建構函式,預設拷貝建構函式 1.c 的預設拷貝建構函式,從深度拷貝和淺拷貝說起 c 類的預設拷貝建構函式的弊端 c 類的中有兩個特殊的建構函式,1 無參建構函式,2 拷貝建構函式。它們的特殊之處在於 1 當類中沒有定義任何建構函式時,編譯器會預設提供乙個無參建構函式且其函式體為空 2 當類中沒有...

預設拷貝建構函式 預設賦值操作

做了一道題,錯了。收藏下 include include using namespace std class person person class beauty public person beauty virtual void say private int p void test int ma...

自定義拷貝建構函式 預設的拷貝建構函式

自定義拷貝建構函式 類名 類名 const 類名 物件名 拷貝建構函式的函式體 利用下述語句呼叫拷貝建構函式 rectangle p2 p1 include using namespace std class rectangle public rectangle int len,int wid le...