作者adrianshum (Alien)
看板C_and_CPP
標題Re: [問題] copy constructor
時間Thu Oct 22 21:11:36 2009
※ 引述《Arim (Arim5566)》之銘言:
: 爬了許多文,還是不懂copy constructor為什麼一定要用call by reference
: 否則會產生無窮迴圈?
: 可以請版友不吝指教一下嗎 謝謝
假設有一 function foo 長成這樣:
foo(Bar bar);
bar 是 pass-by-value 的.
當有人要 invoke foo()
Bar myBar
foo(myBar);
進入 foo 之前, 因為是 pass by value, 所以要生成一個
myBar 的 copy. 要怎樣生成呢? compiler 會利用 copy ctor
生成一個 myBar 的複製品, 然後供 foo() 裡面使用.
這裡明白還明白嗎?
把故事放回你的問題:
要是 copy ctor 是 pass-by-value 的話, 比如
Bar myBar;
Bar barCopy(myBar);
生成 barCopy 的時候, 因為 myBar 是 pass by value, 所以 compiler
要生成一個 myBar 的複製品 (假設叫 tmpBarA) 才傳進去生成 barCopy.
但生成 tmpBarA, 也是利用 copy ctor, 即是 compiler 是在做
Bar tmpBarA(myBar);
由於是 pass-by-val, 那麼要生成 tmpBarA, 其實傳進去的是 myBar 的一個
複製品 (tmpBarB).
要生成 tmpBarB.......
這樣明白了嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
推 QQ29:請問意思是invoke function就先copy一份 不是因為進去 10/22 21:14
→ QQ29:foo(Bar bar<=這邊assign嘛?); 10/22 21:16
→ QQ29:應該說initial@@ 10/22 21:16
推 QQ29:另外是VC compile就會報錯 說不能寫成傳copy~ 這是VC獨有嘛? 10/22 21:34
推 VictorTom:推解釋:) 10/22 22:12