CppCoreGuidelines C.84 swap 函数不可运行失败
16 November 2022
C.84: 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