[問題] 有關運算子多載

看板C_and_CPP作者 (檸檬子)時間12年前 (2011/11/03 22:20), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串1/3 (看更多)
開發平台(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

11/03 22:28, , 1F
http://ppt.cc/7EQ! 還不直接用這個?
11/03 22:28, 1F

11/03 22:36, , 2F
你要寫operator= 把預設的 memberwise copy 改掉
11/03 22:36, 2F

11/03 22:38, , 3F
assign到c的時候是正確的,但這時候有兩個物件指到同一
11/03 22:38, 3F

11/03 22:39, , 4F
塊記憶體 (一個是c另一個是暫時物件)
11/03 22:39, 4F

11/03 22:39, , 5F
兩個物件解構時會造成 double delete
11/03 22:39, 5F
感謝!搞懂原因了! ※ 編輯: wowslr 來自: 111.251.178.126 (11/03 22:54)
文章代碼(AID): #1EigCJ37 (C_and_CPP)
文章代碼(AID): #1EigCJ37 (C_and_CPP)