我觉得通过引用和举动具有相同的结果。在下面的示例中,移动语义和通过引用传递都具有相同的结果。我以为当我们使用移动语义时,所有权是通过函数传递的,而在主变量中,变量没有任何值。
#include <iostream>
using namespace std;
void move_function(int&& a)
{
cout<<"a:"<<a<<endl;
a++;
cout<<"a:"<<a<<endl;
}
void function(int& val)
{
val++;
cout<<"val:"<<val<<endl;;
}
int main()
{
int a = 100;
move_function(move(a));
cout<<"main a:"<<a<<endl;
function(a);
cout<<"main a:"<<a<<endl;
return 0;
}
有人能告诉我我的困惑吗?我对移动的理解哪里出错了?
答案 0 :(得分:1)
Move()赋予新对象所有权。在希望将互斥量的所有权传递给锁的多线程中,这很有用。
按引用传递是通过创建别名在函数之间传递对象的一种方式。
答案 1 :(得分:0)
参考创建所传递变量的别名。移动是不同的。移动“窃取”变量持有的值。 例如,如果您有
<script>
function printDiv() {
var divToPrint = document.getElementById("monthly-report");
newWin = window.open("");
newWin.document.write(divToPrint.outerHTML);
newWin.print();
newWin.close();
}
</script>
当执行此例程时,ps共享指针将窃取p的值,并产生p值。 但是,当定义了ps2时,将ps的内容复制到此内容,并增加引用计数。新值将为2。