我似乎不理解为什么要使用移动赋值运算符
:
CLASSA & operator=(CLASSA && other); //move assignment operator
另外,复制赋值运算符:
CLASSA & operator=(CLASSA other); //copy assignment operator
移动赋值运算符
只接受r-value reference
参数。
CLASSA a1, a2, a3;
a1 = a2 + a3;
在复制赋值运算符
中,可以使用复制构造函数
或移动构造函数
来构造other
(如果使用rvalue初始化other
,则可以使用move-constructor
——如果定义了move-constructor
)。
如果使用复制构造函数
,我们将进行1次复制,而这个复制是无法避免的。
如果使用移动构造函数
,则性能/行为与第一个重载产生的效果相同。
我的问题是:
1- 为什么要实现移动赋值运算符
。
2- 如果other
是从r-value构造的,则编译器会选择调用哪个赋值运算符
?为什么?
CLASSA & operator=(CLASSA && other);
是一个移动赋值运算符。不确定这如何改变您所询问的内容。复制赋值运算符接受CLASSA
或const CLASSA&
。 - RadiodefCLASSA
的成本如何。 - Chris Drew