我的理解是可变借款人可以将所有权转移给另一个可变借款人。但是这个移动好像和移动一个非指针变量有点不同。让我们看一个例子。当 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
。
出于多种原因,这两种行为都是可以理解和需要的。但我只是想确认我的理解,即这两个 Action 在本质上略有不同。我这样想对吗?
最佳答案
你是对的,除了在第一个实例中,引用没有被移动,它只是被重新借用,这是引用特有的行为。也许这会澄清一切,因为它不是移动语义中的异常,而是完全不同的行为。
关于rust - 移动可变借用的所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27650188/