可变引用是否意味着 Rust 中的所有权损失?

问题描述 投票:0回答:1

这个练习来自Ruslings,一旦纠正,给出:

    fn move_semantics4() {
        let mut x = Vec::new();
        let y = &mut x;
        y.push(42);
        let z = &mut x;
        z.push(13);
        assert_eq!(x, [42, 13]);
    }

如果我将其通过Aquascope,在借用检查器上,它会给出:

Aquascope borrow checker explanation

我不明白为什么

x
失去了L3和L5的所有权。 AFAIK,分配给
y
z
的可变引用意味着:

  • 无法在
    x
    上创建更多引用(一次只能创建一个可变引用)
  • 能够
    y
    z
    (依次)在矢量上读写

但不会失去所有权。

据我所知,视觉表示似乎验证了所有权的保留

x
:

Memory visual representation

有人可以详细说明一下吗?我想我错过了一些关键点。

谢谢

rust borrow-checker mutable ownership
1个回答
0
投票

在这一行中:

设 y = &mut x;

你就像把所有权借给y一样。由于第 5 行之后,没有 y,借用结束,x 再次成为所有者。对 z 重复相同的操作。在最后一行,所有权再次返回到 x。

© www.soinside.com 2019 - 2024. All rights reserved.