我看到了这个:question
但对于像我这样的C ++新手来说,那里的答案有点非常。如果有人可以帮助我的话,我希望如此。
CLASSA & operator=(CLASSA && other); //move assignment operator
CLASSA & operator=(CLASSA other); //copy assignment operator
我仍然没有理解为什么我们需要这两个?他们基本上做同样的事情?那么有什么区别,你会在哪里使用另一个?
答案 0 :(得分:1)
首先,复制赋值运算符通常使用“const CLASSA&”作为参数,而不仅仅是“CLASSA”。
通常,移动有两种用例:
std::vector<std::string>
需要增长时,可以使用移动。在过去(当没有rval ref存在时),std::vector<std::string>
grow实现如下:分配一个新的更大的区域,然后复制(慢)字符串到新的位置,然后销毁字符串在旧地方。现在,有了rval refs,就会发生这种情况:分配一个新的更大的区域,然后移动(快速)字符串到新的位置。