关于Vec和数组中变量的所有权,以及被引用情况下的所有权,下面的代码基本涵盖了主要的场景,可编译通过,不做解释了:
fn main() {
let mut a = vec![Box::new(1), Box::new(2)];
let mut b = &mut a;
// a[0] = Box::new(10);
b[0] = Box::new(10);
let c = &mut b;
c[0] = Box::new(20);
println!("{:?}", c);
println!("{:?}", b);
println!("{:?}", a);
let b = &mut a[0];
*b = Box::new(10);
let mut a = [1, 2, 3];
let b = &mut a;
// a[0] += 10;
b[0] += 10;
let b = &mut a[0];
*b += 10;
println!("{:?}", b);
println!("{:?}", a);
}
输出:
[20, 2]
[20, 2]
[20, 2]
21
[21, 2, 3]
rust的所有权概念本身不复杂,但在实际应用中,遇到复合数据结构,以及引用的引用的时候,加上可变、不可变的限制,就变得很复杂了。