16 November 2022

C++ 核心指南目录

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