看板 C_and_CPP 關於我們 聯絡資訊
以下範例 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
littleshan:因為你寫了 A 的copy ctor而且裡面沒有對b做處理 11/01 23:55
james732:你的程式碼甚至不會做member-wise的copy 11/01 23:56
喔 我懂了 本來不寫A的copy constructor 就會call B的 copy constructor 寫了之後compiler不提供預設的member-wise的copy 所以不做了這樣 謝謝兩位:) ※ 編輯: k0783154 來自: 220.136.36.43 (11/02 00:03)
james732:確實,既然你有提供自己的constructor,你寫了什麼就只會 11/02 00:06
james732:做什麼,沒寫的事情就不會做 11/02 00:06
legnaleurc:其實那也不是 assign 的動作就是了 ... 11/02 03:36
purincess:對阿 A a2 = a1; 其實是A a2(a1);... 11/02 03:44
purincess:如果真的是assign的話被叫的應該是A& operator=(A&); 11/02 03:45
purincess:上面好像少寫const XD 11/02 03:45
angleevil:如果沒寫assign,編譯器會隱式轉換copy ctor. 11/03 16:47
angleevil:再來就是B沒寫copy ctor.所以編譯器會幫你預設一個 11/03 16:48
angleevil:copy ctor. 但是如果裡面有指標的話. 嘖嘖.你創造陷阱 11/03 16:49
angleevil:給自己 11/03 16:49