移动可变借入的所有权

Raj*_*ajV 5 rust

我的理解是,可变借款人可以将所有权转移给另一个可变借款人.但这一举动似乎与移动非指针变量有点不同.我们来看一个例子吧.下面的内容p1会在第一次调用p2时移动到compute().但所有权似乎回归到p1compute()回归之后.

fn compute(p2: &mut Point) {
}

fn reset(p1: &mut Point) {
    compute(p1); //OK
    compute(p1); //OK
}
Run Code Online (Sandbox Code Playgroud)

这与常规变量的移动方式不同.

fn compute(p2:  Point) {
}

fn reset(p1: Point) {
    compute(p1); //OK
    compute(p1); //Compile error
}
Run Code Online (Sandbox Code Playgroud)

现在,所有权恢复到p1第一后compute()调用返回.

由于许多原因,这两种行为都是可以理解和可取的 但我只想证实我的理解,这两个举动在本质上略有不同.我是这样思考的吗?

Jor*_*eña 2

您是正确的,除了在第一个实例中,引用没有被移动,它只是被重新借用,这是引用特有的行为。也许这可以澄清问题,因为它不是移动语义中的例外,而是完全不同的行为。