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
相关产品推荐
相关产品推荐

