首页 > 解决方案 > C++按值赋值,有什么缺点?

问题描述

最近,我偶然发现了这种模式:

class Foo {
   Foo() = default;
   Foo(const Foo &) = default;
   Foo(Foo &&) = default;
   Foo & operator=(Foo rhs) {
      swap(rhs);
      return *this;
   }
};

仔细观察这个模式会发现,由于复制省略,这个单一的分配功能可以免费提供移动分配和“复制和交换”的复制分配。既然这么好用,又何尝不是“主流模式”呢。有没有这样做的?

注意:没有临时对象的自定义复制构造函数可以在更少的步骤中产生操作,但是,对于这个问题,明确编写复制和移动分配周围的交换可以带来什么好处。

关于可能重复的问题“什么是复制和交换习语”,我的问题假设读者已经知道它是什么。

谢谢

标签: c++assignment-operatorcopy-assignmentmove-assignment-operator

解决方案


推荐阅读