swap函数_为值类型类提供一个swap成员函数

ee81459425acfb52461304cec4902b04.png

C.83: For value-like types, consider providing a noexcept swap function

C.83:对于值类类型,考虑提供一个不会抛出异常的交换函数

Reason(原因)

A swap can be handy for implementing a number of idioms, from smoothly moving objects around to implementing assignment easily to providing a guaranteed commit function that enables strongly error-safe calling code. Consider using swap to implement copy assignment in terms of copy construction. See also destructors, deallocation, and swap must never fail.

移动功能可以在实现很多常规操作时提供便利。从平滑地移动对象到更容易地实现赋值,以至提供有保证的提交函数,这个函数为不会失败的调用代码提供强有力的支持。

Example, good(示例)

class Foo {public:    void swap(Foo& rhs) noexcept    {        m1.swap(rhs.m1);        std::swap(m2, rhs.m2);    }private:    Bar m1;    int m2;};

Providing a nonmember swap function in the same namespace as your type for callers' convenience.

为了调用者的方便,在和目标类型同一个命名空间中提供一个非成员的swap函数。

void swap(Foo& a, Foo& b){    a.swap(b);}

Enforcement(实施建议)

  • (Simple) A class without virtual functions should have a swap member function declared.
  • (简单)不包含虚函数的类就应该定义一个swap函数。
  • (Simple) When a class has a swap member function, it should be declared noexcept.
  • (简单)如果一个类包含一个swap成员函数,这个函数应该被声明为noexcept。

原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c83-for-value-like-types-consider-providing-a-noexcept-swap-function


觉得本文有帮助?请分享给更多人。

请多精彩文章请关注微信公众号【面向对象思考】!

面向对象开发,面向对象思考!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值