最近,我偶然发现了这种模式:
class Foo {
Foo() = default;
Foo(const Foo &) = default;
Foo(Foo &&) = default;
Foo & operator=(Foo rhs) {
swap(rhs);
return *this;
}
};
仔细观察这个模式会发现,由于复制省略,这个单一的分配功能可以免费提供移动分配和“复制和交换”的复制分配。既然这么好用,又何尝不是“主流模式”呢。有没有这样做的?
注意:没有临时对象的自定义复制构造函数可以在更少的步骤中产生操作,但是,对于这个问题,明确编写复制和移动分配周围的交换可以带来什么好处。
关于可能重复的问题“什么是复制和交换习语”,我的问题假设读者已经知道它是什么。
谢谢