看板 C_and_CPP 關於我們 聯絡資訊
各位大大好~~ 小的目前在練習寫重載運算子 寫出了下面這些東西 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)
loveme00835:@_@ 01/18 17:01
james732:你需要一個 Destructor 01/18 17:22
james732:我回錯了,你的程式不會發生你講的問題,但有別的問題 01/18 17:23
james732:我又回錯了,你的程式會發生你講的問題 01/18 17:26
james732:你需要的是 copy constructor 01/18 17:26
x000032001:XDDDD 01/18 17:28
HudsonE:Private: int n, *data; 改成 Private: vector< int> data 01/18 17:31
loveme00835:你應該要知道在沒有 copy ctor 的情況下, 回傳值那邊 01/18 18:17
loveme00835:是成員各自用 copy ctor 初始化, 指標這樣玩就炸定了 01/18 18:19
darkgerm:恩恩~~所以要自己寫一個 bint::bint(const &bint) 囉? 01/18 18:59
darkgerm: bint::bint(const bint&) 01/18 19:00
darkgerm:謝謝XD 01/18 19:00
shec1213:可以做成簽名檔嗎XD? 01/18 19:43
james732:如果樓上是說要做我耍笨的簽名檔,拜託不要 orz 01/18 19:46
VictorTom:j大是要undo還是redo....XD 01/18 22:42