Rust 的所有权系统是其区别于其他编程语言的标志性特性。它使得 Rust 无需垃圾回收器就能保证内存安全,同时在编译期发现数据竞争和空指针等常见问题。本文将从一个系统程序员的视角,深入剖析 Rust 所有权模型的核心机制:所有权语义、借用检查器、生命周期参数、内部可变性模式,以及在实际工程中的常见陷阱与解决方案。

一、所有权的三条铁律

在进入复杂场景之前,先重温 Rust 所有权的三条基本规则:

  1. 每一个值都有且仅有一个所有者(owner)
  2. 当所有者离开作用域时,值被自动释放(drop)
  3. 所有权可以通过赋值或函数调用转移(move),也可以显式复制(copy/clone)

这三条规则看似简单,却蕴含了深远的设计智慧。我们用一段代码来感受:

fn main() {
    let s1 = String::from("hello");
    let s2 = s1;           // 所有权转移(move)
    // println!("{}", s1); // ❌ 编译错误:s1 已被移动
    println!("{}", s2);    // ✅ s2 现在拥有这个字符串

    let s3 = s2.clone();   // 显式深拷贝
    println!("s2={}, s3={}", s2, s3); // ✅ 两者都有效
}

关键在于理解,对于管理堆内存的类型(如 String、Vec

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部