我理解可变借用人可以将所有权移交给另一个可变借用人。但是,这种移动似乎与移动非指针变量有所不同。让我们看一个例子。当第一次调用
这与常规变量的移动方式不同。
compute()
时,p1
被移动到p2
。但是,在compute()
返回后,所有权似乎又回到了p1
。fn compute(p2: &mut Point) {
}
fn reset(p1: &mut Point) {
compute(p1); //OK
compute(p1); //OK
}
这与常规变量的移动方式不同。
fn compute(p2: Point) {
}
fn reset(p1: Point) {
compute(p1); //OK
compute(p1); //Compile error
}
现在,在第一次 compute()
调用返回后,所有权 不会 回到 p1
。
这两种行为出于许多原因都是可以理解和期望的。但我只是想确认我的理解:这两个操作的性质略有不同,我这样想对吗?
&mut
的行为将与其他不可复制的类型完全相同(即它们只能被移动)。 - Vladimir Matveev