看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《kwpn (ITSST)》之銘言: : 除了copy assigment可以用copy and swap idiom, : move assignment也可以用。 : A::A(const A &rhs) : : vec() : { : vec.reverse(rhs.vec.size()); : for (auto &val : rhs.vec) : { : vec.push_back(new int(*val)); : } : } : A::A(A &&rhs) noexcept : : vec(std::move(rhs.vec)) : { : } : A& A::operator=(A rhs) : { : swap(rhs); : return *this; : } : void A::swap(A &rhs) noexcept : { : std::swap(vec, rhs.vec); : } 小弟不太嫩, PTT 首 PO. 相對於其他支援 exception 的語言, C++ 要求 programmer 對 exception 更有 sense, 更敏感. 出個小作業給有興趣的朋友一起玩玩: 怎麼修改可以達成 exception safety? 提示: (Updated) 如果沒有 reserve, 有兩個地方在發生 exception 的時候會 leak. 反之只有一個 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.36.252 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1416988399.A.517.html
notBeing: 是freak!?! 11/26 16:58
dirkc: 會公佈作業答案嗎? 11/26 17:25
fr3ak: 是我喔 (這樣好像怪怪的 @@) 11/26 17:34
fr3ak: @dirkc: 或許沒有標準答案, 但樂意參與討論 :-) 11/26 17:37
saladim: ctor的new那邊若"中途"失敗 已生成的記憶體會leak? 11/26 17:40
kwpn: ctor的寫法確實是not exception safety, 感謝大大發現 11/26 17:44
fr3ak: 提示 2: 的確只有一處的 exception 會造成影響 11/26 17:47
fr3ak: 但會造成兩個地方 leak 11/26 17:47
Killercat: er...這個專有名詞叫exception neutral吧.... 11/26 17:53
Killercat: 等等 不對 你這要求的確是exception safe沒錯 11/26 17:55
fr3ak: 提示 3: (其實是 correction, 之前沒注意到有 reserve Q_Q) 11/26 18:00
fr3ak: 沒有 reserve 才會有兩個地方 leak, 反之只有一個 11/26 18:01
saladim: neutral是說exception得傳播到caller 11/26 18:02
※ 編輯: fr3ak (60.251.36.252), 11/26/2014 18:06:17
saladim: 幹 看不出來啦~~@_@ 難道要檢查self-assignment??? 11/26 18:09
fr3ak: 原po已在另p 提供了一個解答. 還想動動腦袋的先不要看 XD 11/26 18:17