You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Copy and Swap惯用法是否存在不必要的swap操作?

关于Copy and Swap惯用法与移动赋值的疑问

在Stack Overflow一篇讲解Copy and Swap惯用法的回答中,“为什么这能生效?”部分提到:

现在,如果other是用右值初始化的,它会被移动构造。完美。就像C03中我们通过按值传参复用拷贝构造函数的功能一样,C11也会在合适的时候自动选择移动构造函数。(当然,值的拷贝/移动操作可能会被完全省略。)

但这里存在一个问题:就算用了移动构造(也就是接收右值对象时),赋值运算符还是会多执行一次没必要的swap——一次在移动构造函数里,另一次在赋值运算符里。那这种情况下,单独重载移动赋值运算符能不能省去这次多余的swap?

毕竟你看,移动赋值运算符只会执行一次swap:

dumb_array& operator=(dumb_array&& other)
{
    swap(*this, other);
    return *this;
}

内容的提问来源于stack exchange,提问作者CS Student

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 17:32:35