C++ 标准保证std::swap
不会抛出异常。但是,如果要交换的对象在交换期间抛出异常怎么办?接下来,调用者应该如何发现异常发生了?来电者应该采取什么措施?
PS:构造函数抛出异常是很常见的。
struct A
{
A(const A&)
{
throw 1;
}
A& operator =(const A&)
{
throw 2;
return *this;
}
};
int main()
{
A a1, a2;
std::swap(a1, a2); // An exception happened, but the caller doesn't know.
// How to do here ???
}