看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
diabloevagto:http://ppt.cc/7EQ! 還不直接用這個? 11/03 22:28
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)