移动构造函数和移动赋值运算符不可抛出异常
7.11 ID_throwInMove
在移动过程中,对象的状态是不完整的,如果在中途抛出异常,对象将处于错误的状态。
示例:
struct T {
void swap(T&) noexcept(false); // May throw, breaks ID_throwInSwap
T(T&& a) { // Non-compliant
swap(a);
}
T& operator = (T&& a) { // Non-compliant
swap(a);
return *this;
}
};
例中 swap 函数会抛出异常,意味着移动构造函数和移动赋值运算符也会抛出异常,是不符合要求的。