[問題] copy constructor

看板C_and_CPP作者 ( )時間14年前 (2011/11/01 23:48), 編輯推噓1(1011)
留言12則, 5人參與, 最新討論串4/5 (看更多)
以下範例 class A{ public: A(const A &) { cout << "Haha..\n"; } private: B b; }; int main() { A a1; A a2 = a1; // 主要問題是 這個assign的動作會將class A 做member-wise的copy // 那data member b的copy是怎麼做? 為什麼不是呼叫B的copy constructor呢? return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.36.43

11/01 23:55, , 1F
因為你寫了 A 的copy ctor而且裡面沒有對b做處理
11/01 23:55, 1F

11/01 23:56, , 2F
你的程式碼甚至不會做member-wise的copy
11/01 23:56, 2F
喔 我懂了 本來不寫A的copy constructor 就會call B的 copy constructor 寫了之後compiler不提供預設的member-wise的copy 所以不做了這樣 謝謝兩位:) ※ 編輯: k0783154 來自: 220.136.36.43 (11/02 00:03)

11/02 00:06, , 3F
確實,既然你有提供自己的constructor,你寫了什麼就只會
11/02 00:06, 3F

11/02 00:06, , 4F
做什麼,沒寫的事情就不會做
11/02 00:06, 4F

11/02 03:36, , 5F
其實那也不是 assign 的動作就是了 ...
11/02 03:36, 5F

11/02 03:44, , 6F
對阿 A a2 = a1; 其實是A a2(a1);...
11/02 03:44, 6F

11/02 03:45, , 7F
如果真的是assign的話被叫的應該是A& operator=(A&);
11/02 03:45, 7F

11/02 03:45, , 8F
上面好像少寫const XD
11/02 03:45, 8F

11/03 16:47, , 9F
如果沒寫assign,編譯器會隱式轉換copy ctor.
11/03 16:47, 9F

11/03 16:48, , 10F
再來就是B沒寫copy ctor.所以編譯器會幫你預設一個
11/03 16:48, 10F

11/03 16:49, , 11F
copy ctor. 但是如果裡面有指標的話. 嘖嘖.你創造陷阱
11/03 16:49, 11F

11/03 16:49, , 12F
給自己
11/03 16:49, 12F
文章代碼(AID): #1Ei1ImW8 (C_and_CPP)
文章代碼(AID): #1Ei1ImW8 (C_and_CPP)