[問題] 重載運算子

看板C_and_CPP (C/C++)作者 (黑駿)時間15年前 (2011/01/18 16:54), 編輯推噓2(2013)
留言15則, 7人參與, 最新討論串3/3 (看更多)
各位大大好~~ 小的目前在練習寫重載運算子 寫出了下面這些東西 class bint { Public: bint(){data = new int[10]}; ~bint(){delete [] data;} bint operator~(){ bint re; for(int i=0;i<n;i++){ re.data[i] = ~data[i]; } return re; } Private: int n,*data; } 因此我可以用 bint a; 來宣告,然後 ~a 來取得 a 的補數 可是問題來了… 在 operator~() 函式中,宣告了一個 re 那個 re 應該是區域變數吧 在離開函式時,會因為解構所以 delete 掉空間 把他 return 回去會不會造成 *data 指向被 delete 的空間? 造成 undefined behaviour ... 請問我要怎麼做?? 謝謝 -- 光明 的背後 是 黑暗 黑暗 的背後 還是 黑暗 由此可知 黑暗 > 光明 Q.E.D. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.8.135.59 ※ 編輯: darkgerm 來自: 124.8.135.59 (01/18 16:55) ※ 編輯: darkgerm 來自: 124.8.135.59 (01/18 17:21)

01/18 17:01, , 1F
@_@
01/18 17:01, 1F

01/18 17:22, , 2F
你需要一個 Destructor
01/18 17:22, 2F

01/18 17:23, , 3F
我回錯了,你的程式不會發生你講的問題,但有別的問題
01/18 17:23, 3F

01/18 17:26, , 4F
我又回錯了,你的程式會發生你講的問題
01/18 17:26, 4F

01/18 17:26, , 5F
你需要的是 copy constructor
01/18 17:26, 5F

01/18 17:28, , 6F
XDDDD
01/18 17:28, 6F

01/18 17:31, , 7F
Private: int n, *data; 改成 Private: vector< int> data
01/18 17:31, 7F

01/18 18:17, , 8F
你應該要知道在沒有 copy ctor 的情況下, 回傳值那邊
01/18 18:17, 8F

01/18 18:19, , 9F
是成員各自用 copy ctor 初始化, 指標這樣玩就炸定了
01/18 18:19, 9F

01/18 18:59, , 10F
恩恩~~所以要自己寫一個 bint::bint(const &bint) 囉?
01/18 18:59, 10F

01/18 19:00, , 11F
bint::bint(const bint&)
01/18 19:00, 11F

01/18 19:00, , 12F
謝謝XD
01/18 19:00, 12F

01/18 19:43, , 13F
可以做成簽名檔嗎XD?
01/18 19:43, 13F

01/18 19:46, , 14F
如果樓上是說要做我耍笨的簽名檔,拜託不要 orz
01/18 19:46, 14F

01/18 22:42, , 15F
j大是要undo還是redo....XD
01/18 22:42, 15F
文章代碼(AID): #1DDLL2Yv (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DDLL2Yv (C_and_CPP)