郭佳恩前端工程师
返回首页
20 分钟阅读技术专栏

Rust 所有权系统解析:内存安全的基石

所有权(Ownership)是 Rust 最独特的特性。它让 Rust 无需垃圾回收(GC)即可保证内存安全。

RustSystems ProgrammingBackend

Rust 的核心特性就是所有权。虽然这个概念在其他语言中也有,但 Rust 将其编码到了语言核心中。

所有权规则

  1. Rust 中的每一个值都有一个被称为其 所有者(owner)的变量。
  2. 值在任一时刻有且只有一个所有者。
  3. 当所有者(变量)离开作用域,这个值将被丢弃。

变量作用域

rust
fn main() {
    {                      // s 在这里无效, 它尚未声明
        let s = "hello";   // 从此处起,s 是有效的

        // 使用 s
        println!("{}", s);
    }                      // 此作用域已结束,s 不再有效
}

移动(Move)与克隆(Clone)

在 Rust 中,对于堆上数据,赋值操作默认是移动,而不是浅拷贝。

rust
let s1 = String::from("hello");
let s2 = s1;

// println!("{}, world!", s1); // 错误!s1 已经无效了
println!("{}, world!", s2); // 正确

如果你确实需要深度复制 String 堆上的数据,可以使用 clone 方法:

rust
let s1 = String::from("hello");
let s2 = s1.clone();

println!("s1 = {}, s2 = {}", s1, s2);

引用与借用

rust
fn calculate_length(s: &String) -> usize { // s 是对 String 的引用
    s.len()
} // 这里,s 离开了作用域。但因为它并不拥有引用值的所有权,
  // 所以什么也不会发生

评论区0

自由讨论你的想法,分享你的实践。

还没有评论

成为第一个发言的人吧