Rust中可变引用是否意味着所有权丢失?Aquascope显示疑问解析
Rust可变引用与Aquascope所有权显示的困惑
问题代码
我修正后的Rustlings move_semantics4.rs 练习代码如下:
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工具分析这段代码时,借用检查器显示第3行和第5行中x丢失了所有权。但我清楚Rust的可变引用规则:
- 同一时间只能存在一个
x的可变引用,无法创建其他引用 y和z可以依次对向量执行读写操作
这完全不涉及所有权转移,我自己做的内存可视化图也明确显示所有权仍属于x。另外我还补充了包含move操作和可变引用的代码片段,其中move操作会有特殊的粗箭头标记,能明显区分开move和可变引用的不同。
希望有人能详细解释Aquascope为何会这样显示。
内容的提问来源于stack exchange,提问作者overflaw
相关产品推荐
相关产品推荐

