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