作者aquatear (米蟲)
看板C_and_CPP
標題Re: [問題] 問一個物件相加 operator+ 的問題....
時間Fri May 15 14:41:05 2009
※ 引述《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
1F:推 Ebergies:pWin 並沒有呼叫解構... 是你回傳的 CWin 呼叫的... 05/15 14:50
2F:→ aquatear:還是不太了解... 照理說動態配置應該不會呼叫解構才對 ? 05/15 15:58
3F:→ fuha:應該是你其它地方有呼叫了吧 05/15 16:31
4F:推 legnaleurc:pWin複製了一份給暫時物件,解構是暫時物件解構 05/15 16:40
5F:→ legnaleurc:pWin並沒有解構 05/15 16:40