C++ C++;按价值分配,缺点是什么?
最近,我偶然发现了这种模式:C++ C++;按价值分配,缺点是什么?,c++,assignment-operator,copy-assignment,move-assignment-operator,C++,Assignment Operator,Copy Assignment,Move Assignment Operator,最近,我偶然发现了这种模式: class Foo { Foo() = default; Foo(const Foo &) = default; Foo(Foo &&) = default; Foo & operator=(Foo rhs) { swap(rhs); return *this; } }; 仔细观察此模式发现,由于复制省略,此单一赋值函数通过“复制和交换”免费提供移动赋值和复制赋值。既然它如此方便
class Foo {
Foo() = default;
Foo(const Foo &) = default;
Foo(Foo &&) = default;
Foo & operator=(Foo rhs) {
swap(rhs);
return *this;
}
};
仔细观察此模式发现,由于复制省略,此单一赋值函数通过“复制和交换”免费提供移动赋值和复制赋值。既然它如此方便,为什么它不是一个“主流模式”。这样做有什么好处吗
注意:没有临时变量的定制复制构造函数可以在更少的步骤中生成操作,但对于这个问题,显式编写围绕交换的复制和移动赋值会带来什么好处
关于问题“”的可能重复,我的问题假设读者已经知道它是什么
感谢浪费了资源,做了可以轻松实施的事情,尤其是为了一次移动。移动不需要先复制,它们通常会窃取资源,所以为什么要在您可以直接获取的情况下复制所有内容,这通常要快得多?可能复制@ChrisMM Pass by value并不意味着复制。搬家也是一种可能性。“为什么这不是一种‘主流模式’”是什么让你觉得不是?你是在问为什么没有更多的人编写更好的代码仅从C++17开始,复制省略是有保证的。尝试向Foo添加一些成员,如std::vector,并使用MSVC进行编译。