Re: [問題] 問一個物件相加 operator+ 的問題....

看板C_and_CPP (C/C++)作者 (米蟲)時間16年前 (2009/05/15 14:41), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串3/4 (看更多)
※ 引述《aquatear (米蟲)》之銘言: : 寫了一個重載 + 號 的函式 , 目的是將兩個 CWin 物件相加, : 此物件是一個視窗, 相加結果是取視窗最大的寬高當作新視窗的寬高, : 然後把新視窗的 title 設為 "new win" : CWin operator+(CWin &w) : { : int width,height; : width = this->width > w.width ? this->width: w.width; : height = this->height > w.height ? this->height : w.height; : return CWin(100,width,height,"new win"); : } 老實說, 我還有一個很大的疑問 聽說: 動態配置的記憶體, 必須靠自己 delete , 才會正常呼叫解構 但是我把 operator+ 改成如下 CWin operator+(CWin &w) { int width,height; CWin *pWin; width = this->width > w.width ? this->width: w.width; height = this->height > w.height ? this->height : w.height; pWin = new CWin(100,width,height,"new win"); return *pWin; } 我動態配置一個新的物件 *pWin 結果在執行完 win1=win2+win3 之後 這個 pWin 會自己呼叫解構把裡面的資料銷毀... 這實在非常奇怪 不知道有人可以解釋嗎 ? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.219.68.170

05/15 14:50, , 1F
pWin 並沒有呼叫解構... 是你回傳的 CWin 呼叫的...
05/15 14:50, 1F

05/15 15:58, , 2F
還是不太了解... 照理說動態配置應該不會呼叫解構才對 ?
05/15 15:58, 2F

05/15 16:31, , 3F
應該是你其它地方有呼叫了吧
05/15 16:31, 3F

05/15 16:40, , 4F
pWin複製了一份給暫時物件,解構是暫時物件解構
05/15 16:40, 4F

05/15 16:40, , 5F
pWin並沒有解構
05/15 16:40, 5F
文章代碼(AID): #1A3Gw26G (C_and_CPP)
文章代碼(AID): #1A3Gw26G (C_and_CPP)