※ 引述《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. 反之只有一個