教程 rust tutorial

所有权机制

Rust 通过所有权(Ownership)系统管理内存,确保编译时检测资源的使用权,避免了传统语言中的悬垂指针和内存泄漏问题。

所有权规则

  • 每个值有且只有一个所有者(owner)。
  • 值在所有者离开作用域时被释放。
  • 所有权可以转移(move)或借用(borrow)。

所有权转移(Move)

赋值或函数传参时,所有权默认会转移,原变量不可再用:

rust
fn main() {
    let s1 = String::from("hello");
    let s2 = s1; // 所有权转移到 s2,s1 不再有效
    // println!("{}", s1); // 编译错误
    println!("{}", s2);
}

克隆(Clone)

若需要复制数据而非转移,可以调用 .clone():

rust
let s1 = String::from("hello");
let s2 = s1.clone();
println!("s1 = {}, s2 = {}", s1, s2);

所有权作用域

变量超出作用域时自动释放资源:

rust
{
    let s = String::from("hello");
    println!("{}", s);
} // s 在此作用域结束时释放内存

Rust Playground
打开运行
fn main() {
    let s1 = String::from("hello");
    let s2 = s1; // 所有权转移,s1 不可再用
    // println!("{}", s1); // 编译错误
    println!("{}", s2);
let s3 = String::from("world");
let s4 = s3.clone(); // 显式克隆
println!("s3 = {}, s4 = {}", s3, s4);

}