作者wowslr (檸檬子)
看板C_and_CPP
標題[問題] 有關運算子多載
時間Thu Nov 3 22:20:01 2011
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Visual C++ 2005
問題(Question):
我最近在學習C++,想建一個矩陣運算用的class,
然後使用運算子多載來實做矩陣乘法。
錯誤結果(Wrong Output):
程式碼已經上傳到下面的網址。
在計算c = a * b 時,似乎會產生一個暫存來儲存a * b的結果,再assign到c。
問題是我的矩陣是動態產生的,這個暫存在return時會呼叫解構式,
導致動態產生的矩陣被delete,所以在assign到c時會發生錯誤。
程式碼(Code):(請善用置底文網頁, 記得排版)
http://codepad.org/ty5qXpT9
直接貼到VC裡面編譯應該可以執行。
補充說明(Supplement):
為了避免被解構,我的想法是把JMatrix::operator*裡使用的
暫存JMatrix output(m, n) 宣告成static,
似乎是可行,但不知會不會有什麼問題?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.56.138
推 littleshan:你要寫operator= 把預設的 memberwise copy 改掉 11/03 22:36
→ littleshan:assign到c的時候是正確的,但這時候有兩個物件指到同一 11/03 22:38
→ littleshan:塊記憶體 (一個是c另一個是暫時物件) 11/03 22:39
→ littleshan:兩個物件解構時會造成 double delete 11/03 22:39
感謝!搞懂原因了!
※ 編輯: wowslr 來自: 111.251.178.126 (11/03 22:54)