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

看板C_and_CPP (C/C++)作者 (米蟲)時間16年前 (2009/05/15 10:49), 編輯推噓4(409)
留言13則, 5人參與, 最新討論串1/4 (看更多)
寫了一個重載 + 號 的函式 , 目的是將兩個 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"); } CWin 的內容 class CWin { private: int id; int width; int height; char *title; ... }; 在 main 裡頭 win3 = win1+win2; 問題來了 我寫了一個解構函式 ~CWin() { cout<<"win"<<id<<" was destructed! \n"; delete [] title; system("pause"); } 跑完 operator+ 後 這行 return CWin(100,width,height,"new win") 這個 CWin 新視窗會隨著函式結束呼叫解構而被銷毀 title 這塊記憶體會被釋放, 但是如果不釋放, 會造成 memory leak 請問到底該怎麼寫.... 才不會 memory leak , win3 又可以在 operator+ 裡 設定新 title ... ?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.219.68.170 ※ 編輯: aquatear 來自: 61.219.68.170 (05/15 10:51)

05/15 11:00, , 1F
先看operator =有沒有正確實作
05/15 11:00, 1F

05/15 11:00, , 2F
否則就把title改成std::string
05/15 11:00, 2F

05/15 11:16, , 3F
operator= 有沒有實做跟這個問題比較無關
05/15 11:16, 3F

05/15 11:17, , 4F
因為跑完 operator+後, title 就已經被銷毀
05/15 11:17, 4F

05/15 11:46, , 5F
你的 ctor 要為 title 配置記憶體並且複製參數
05/15 11:46, 5F

05/15 11:47, , 6F
否則 delete 時會試圖釋放 string literal 導致錯誤
05/15 11:47, 6F

05/15 11:47, , 7F
operator= 還有 copy constructor 也都是要注意的地方
05/15 11:47, 7F

05/15 11:48, , 8F
這些問題,只要你改用 std::string 就可以一次解決
05/15 11:48, 8F

05/15 13:30, , 9F
為什麼 std::string 可以解決呢 ? 解構函式不會去 delete
05/15 13:30, 9F

05/15 13:30, , 10F
他嗎?
05/15 13:30, 10F

05/15 13:59, , 11F
重點不是它會不會解構,而是被解構前有沒有被正常複製
05/15 13:59, 11F

05/15 14:16, , 12F
string是STL容器之一,然而STL接近無敵啊XD
05/15 14:16, 12F

05/16 06:38, , 13F
big three問題找過書嗎,這裡問會很片斷
05/16 06:38, 13F
文章代碼(AID): #1A3DWw-6 (C_and_CPP)
文章代碼(AID): #1A3DWw-6 (C_and_CPP)