Re: [問題] Copy Constructor

看板EE_DSnP作者 (Ric)時間13年前 (2010/10/14 20:54), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
哇哇! 這個 compiler optimize 好大!! 我事先沒有預料到... 的確,剛剛用 debugger trace 了一下 copy constructor 果真沒有被呼叫到, 其實不只這個地方,還有其他 return by object 的地方都被 optimize 掉了... 雖然這不是我題目的本意 --- 我本來是想要測試大家在 object copy 時是否有注意到 pointer type data member 的處理, 但是這樣恐怕很多地方都測不到了... 但是題目都出了, 好吧! 大家可以用正常 (沒有參數) 的 g++ compile 就好了, 只是如果你要測試一下你的 copy constructor, 可以將 main() 改一下來測試, 比方說改一下 m1 的輸入: Matrix m4 = inputMatrix(); Matrix m1 = m4; 我再考慮一下是否在批改時要用別的 main() 來測... ※ 引述《occqoo (小歐)》之銘言: : 標題: [問題] Copy Constructor : 時間: Thu Oct 14 14:49:52 2010 : : 在寫作業1.2 P2的時候愈到了一點小問題 : : 本來想說檢查一下自己的code : : 就用cout大法(老師不要殺我)在Matrix的copy constuctor中 : : 加上了cout<<"Matrix copy"; : : 結果在執行hw1.2.p2.cpp中的 : : Matrix m1 = InputMatrix() : : 發現並沒有Matrix copy這行輸出 : : : 用ddd檢查發現copy constructor真的沒有被呼叫到 : : 跟上課時講得好像有點不同(還是我搞錯了) : : 進一步檢查發現destructor也一樣沒有被呼叫過 : : : 稍微Google了一下 : : 好像有人說g++在這種function return的情況下會自動作優化 : : 並不會真的去呼叫我們寫的copy constructor : : 不知道版上有沒有強者知道實際狀況 : : 不然好像自己寫得code都沒有被執行的樣子 : : 感謝大家或老師幫忙解答嘍~ : : : : : p.s 2732篇都沒有人回答我QQ : : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.112.244.187 : 推 yangjiunru:這是Return value optimization 10/14 15:29 : → yangjiunru:en.wikipedia.org/wiki/Return_value_optimization 10/14 15:29 : 推 yangjiunru:g++的話可以在compile的時候加參數關掉這個功能 10/14 15:34 : → yangjiunru:g++ -fno-elide-constructors -o xxx xxx.cpp 10/14 15:35 : → occqoo:所以這次作業正確的話要用上面那個方式compile嘍? 10/14 16:04 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.11.13 ※ 編輯: ric2k1 來自: 123.193.11.13 (10/14 20:59)
文章代碼(AID): #1CjlsBWL (EE_DSnP)
文章代碼(AID): #1CjlsBWL (EE_DSnP)