Appearance
所有权与借用
所有权
计算机程序必须在运行时管理它们所使用的内存资源。
所有权是 Rust 语言为高效使用内存而设计的语法机制。它能够让 Rust 在编译阶段更有效地分析内存资源的有用性。
所有权有以下三条基础规则:
- Rust 中的每个值都有一个变量,称为其所有者。
- 一次只能有一个所有者。
- 当所有者不在程序运行范围时,该值将被删除。
rust
let s = "hello world";
let s2 = s;
println!("{}", s2);
println!("{}", s);借用
Rust 允许我们在不获取所有权的情况下使用值,这就是借用。
rust
let s = String::from("hello world");
let s2 = &s;
println!("{}", s2);
println!("{}", s);借用分为可变借用和不可变借用:
- 不可变借用:允许多个不可变引用同时存在,但不能修改数据。
- 可变借用:允许只有一个可变引用同时存在,可以修改数据。
rust
let mut s = String::from("hello world");
let s2 = &mut s;
s2.push_str("!");
println!("{}", s);需要注意的是,在同一作用域内,不能同时存在可变引用和不可变引用:
rust
let mut s = String::from("hello world");
let s2 = &s;
let s3 = &mut s;编译器会报错,因为 s2 是不可变引用,而 s3 是可变引用,它们不能同时存在。
可变引用只能有一个
rust
let mut s = String::from("hello world");
let s2 = &mut s;
let s3 = &mut s;编译器会报错,因为 s2 和 s3 都是可变引用,它们不能同时存在。