CppCoreGuidelines C.84 swap 函数不可运行失败
16 November 2022
“A swap function must not fail”
理由
swap 的使用很广泛,一般假定是不会运行失败的。如果 swap 会运行失败,程序就很难写正确。对于 swap 会运行失败的类型,标准库容器和算法也不能正确工作了。
坏例子
void swap(My_vector& x, My_vector& y) { auto tmp = x; // copy elements x = y; y = tmp; }
这里不仅运行慢,而且如果 tmp 中有内存分配的话,swap 还可能抛出异常,这样就会导致 STL 算法运行失败。
强化
- (简单)当一个类有 swap 成员函数时,应该声明为 noexcept