概述
所有权是RUST里最核心的概念,需重点掌握。
所有权规则
- 每一个值有且只有一个变量所拥有;
- 所有权可以从一个变量转移到另一个变量;
- 每个变量都有生命周期(作用域);
- 当变量的生命周期结束(离开作用域),变量所拥有的值将被丢弃(释放这个值所占的内存);
生命周期示例
fn test() {
let m: i32 = 9; // 变量 m 诞生
{
let h: i32 = 100; // 变量 h 诞生
println!("{}", h);
} // 变量 h 消亡
// 此时变量 h 已不存在,如果继续使用 h 会导致编译报错
// println!("{}", h);
// 此时变量 m 还存在,可以继续访问 m
println!("{}", m);
} // 变量 m 消亡
fn main() {
test();
// 此时变量 m 已不存在,如果继续使用 m 会导致编译报错
// println!("{}", m);
}
转移所有权示例
// 声明结构体 Point
struct Point{
x: i32,
y: i32,
}
fn main() {
let h: Point = Point{x: 1, y: 2};
println!("h: x={}, y={}", h.x, h.y);
let m = h; // 所有权从 h 转移到变量 m
println!("m: x={}, y={}", m.x, m.y);
// 此时变量 h 已不存在,如果继续使用 h 会导致编译报错
// println!("h: x={}, y={}", h.x, h.y);
}