16 November 2022

C++ 核心指南目录

“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