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,在借用检查器上,它会给出:
我不明白为什么
x
失去了L3和L5的所有权。 AFAIK,分配给 y
和 z
的可变引用意味着:
x
上创建更多引用(一次只能创建一个可变引用)y
和 z
(依次)在矢量上读写但不会失去所有权。
据我所知,视觉表示似乎验证了所有权的保留
x
:
有人可以详细说明一下吗?我想我错过了一些关键点。
谢谢
在这一行中:
设 y = &mut x;
你就像把所有权借给y一样。由于第 5 行之后,没有 y,借用结束,x 再次成为所有者。对 z 重复相同的操作。在最后一行,所有权再次返回到 x。