CppCoreGuidelines C.83 对于值类型,考虑提供 noexcept 的 swap 函数
14 November 2022
“For value-like types, consider providing a noexcept swap function”
理由
swap 可用来方便的实现多种常用功能,比如流畅地移动对象,实现赋值操作,能够确保确定的功能,减少代码调用错误。
考虑使用 swap 是在拷贝构造函数中实现复制拷贝操作。
好例子
class Foo { public: void swap(Foo& rhs) noexcept { m1.swap(rhs.m1); std::swap(m2, rhs.m2); } private: Bar m1; int m2; };
在你自定义类的名字空间下实现一个非成员的 swap 函数可以方便函数调用使用。
void swap(Foo& a, Foo& b) { a.swap(b); }
强化
- 可拷贝类型须提供一个 swap 成员函数或外部的 swap 函数重载
- (简单)当一个类有 swap 成员函数时,应该声明为 noexcept