作者:
fr3ak (fr3@K)
2014-11-26 15:53:17※ 引述《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. 反之只有一個
作者:
notBeing (read and be read)
2014-11-26 16:58:00是freak!?!
作者:
dirkc (3781615)
2014-11-26 17:25:00會公佈作業答案嗎?
作者:
fr3ak (fr3@K)
2014-11-26 17:34:00是我喔 (這樣好像怪怪的 @@)@dirkc: 或許沒有標準答案, 但樂意參與討論 :-)
作者:
saladim (殺拉頂)
2014-11-26 17:40:00ctor的new那邊若"中途"失敗 已生成的記憶體會leak?
作者:
kwpn (ITSST)
2014-11-26 17:44:00ctor的寫法確實是not exception safety, 感謝大大發現
作者:
fr3ak (fr3@K)
2014-11-26 17:47:00提示 2: 的確只有一處的 exception 會造成影響但會造成兩個地方 leak
er...這個專有名詞叫exception neutral吧....等等 不對 你這要求的確是exception safe沒錯
作者:
fr3ak (fr3@K)
2014-11-26 18:00:00提示 3: (其實是 correction, 之前沒注意到有 reserve Q_Q)沒有 reserve 才會有兩個地方 leak, 反之只有一個
作者:
saladim (殺拉頂)
2014-11-26 18:02:00neutral是說exception得傳播到caller幹 看不出來啦~~@_@ 難道要檢查self-assignment???
作者:
fr3ak (fr3@K)
2014-11-26 18:17:00原po已在另p 提供了一個解答. 還想動動腦袋的先不要看 XD