推 Feis:避免自我指定: a = a; 08/19 23:25
推 LPH66:自我賦值檢定 不要讓 x = x; 出事 08/19 23:25
→ suhorng:使用者說不定會寫 自己 = 自己; (?) 08/19 23:26
推 littleshan:如果你沒檢查,自我賦值 (ex. a=a;) 會爆炸 08/19 23:26
→ LPH66:可以想像一下當這條式子成立時下面的所有式子會發生什麼事 08/19 23:26
→ littleshan:不過他這樣寫仍然不是exception safe就是了 08/19 23:27
→ kumusou:我看很多說明都是這樣寫 避免自我賦值 但是為什麼不行? 08/19 23:34
→ kumusou:A=A城市應該可以執行才對吧? 邏輯也沒 應該沒有這道理吧? 08/19 23:35
→ Feis:a=b;如果是先清除a再將b複製給a,那a=a? 08/20 00:00
推 steve1012:delete []_array會把自己清掉 在賦值給自己 這樣會有問 08/20 00:34
→ steve1012:題 08/20 00:34
→ loveme00835:copy-and-swap idiom 寫多了都會忽略這個 x) 但是要加 08/20 01:24
→ loveme00835:lock 08/20 01:24
推 Killercat:我只能說這沒啥道理 就是經驗 XD 使用者很容易亂寫 08/20 03:09
→ Killercat:同一個變數兩個參考互相賦值的錯誤並不是真的很少見.... 08/20 03:10
雖然他有DELETE 但是他有先NEW一個空間出來才賦值
delete [] _array;
//事先刪掉在配置一個
//一般來說不是會有DEFAULT值嗎
//只是值會很怪而已吧
_array = new int[safeArray.length];
for(int i = 0; i < safeArray.length; i++) {
_array[i] = safeArray._array[i];
}
這樣會有問題嗎 QQ
感謝前輩相助
※ 編輯: kumusou 來自: 39.14.67.162 (08/20 19:52)
→ suhorng:自己assign給自己 a = a 那值不是應該不變嗎? 08/20 19:59
→ fireslayer:阿你都說值會很怪了 那當然錯啊 08/20 20:12
推 steve1012:我自己嘗試了一下 賦值的確會有問題 08/20 23:00
→ steve1012:賦值錯了基本上就是個問題吧 08/20 23:00
推 johnhmj:if(this != &safeArray) 避免多此一舉 沒必要設值給自己 08/20 23:40
→ johnhmj:可改成)if(this == &safeArray){ return *this;} 08/20 23:42
→ johnhmj:再者,要特別處理"指標變數"成員;因為this->_array每個元 08/20 23:50
→ johnhmj:素的值要等於safeArray._array,必須用for逐一設值。 08/20 23:52
→ johnhmj:還有,this->_array的長度可能與safeArray._array不同,必 08/20 23:54
→ johnhmj:須先砍除this->_array陣列再new一次。 08/20 23:56
→ johnhmj:if(this->length!=safeArray.length){ delete...; new...} 08/21 00:00
→ johnhmj:也可以加個判斷式(如上所示)陣列同長度不必砍除再建。 08/21 00:01