推 yangjiunru:檢查一下"Copy constructor"和"operator ="? 10/19 22:47
(以下僅表達概念)
在Matrix的+ operator 的funtion 中
(+operator function){
Matrix add(x,y) // 新建一個add之後回傳用,x、y是大小根據傳入要加的matrix決定
for迴圈{
使得add = (傳入的matrix)+(this matrix)
}
if(判斷條件match)
回傳add
else
回傳(*this)
}
這樣做會出問題,檢查很久發現,問題癥結點竟發生在多回傳了*this ??
也不一定是return *this才出問題,return 0 也一樣
只要我用判斷式去決定要回傳兩樣不同東西中的哪樣
if(X)
return a
else
return b
即使條件X沒觸發,他還是會造成不同(莫名的多建構和解構了一些物件)
會和單純的return b做不一樣的事情
所以,我嘗試改成以下測試看看
if(判斷條件match)
回傳add
else
cout<<"not match"
回傳就正確了(我想要的add真的傳回去了)
表示應該不是我在回傳add時沒有設定好(吧)
---
而後我發現
我只要在那個operator的建構function任何地方加上三行
if(條件){
return ...
}
即使條件無觸發,感覺上這三行就只是無用的garbage
但還是會造成最後return add時只return一堆亂碼
---
最後我改成
if(match){
add = this + m
}
else{
add = this
}
return add
就成功了 確實照我想要的,判斷match就回傳有加過的,不match就回傳原來的
但這樣寫實在有點囉嗦... 因為那兩個判斷式內容我都弄的有點長
---
可以問一下這個問題的癥結點在哪嗎
我用ddd trace他的過程到頭很暈orz,還是沒有看出來
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.168.220.200
※ 編輯: BBSealion 來自: 218.168.220.200 (10/19 19:19)