所有权和生命周期

    所有权是Rust的一个突破性功能。它让Rust可以彻底告别垃圾回收,同时做到内存安全和高效率。在涉及到所有权系统的细节之前,我们先看一下这种设计的目的。

    但是,无论你怎么看待GC,它确实是保证代码安全的大杀器。你永远不需要担心有什么内容会被过早释放(尽管有的时候你已经不想再使用它们了……)。这是C和C++会普遍遇到的问题。看一下这个曾纠缠过每一个使用过非GC语言的人的简单错误:

    这种事情永远不会发生在Rust的世界。Rust需要程序员向编译器保证自己代码的健壮性。

    1. let mut data = vec![1, 2, 3];
    2. // 获得内部引用
    3. // 哎呀!push方法导致data的内部存储位置重新分配了
    4. // (当然这段代码在Rust中不能编译)
    5. println!("{}", x);

    简单地分析作用域不足以防止这个bug,因为data在我们使用它的范围内确实是一直存在的。但是它在我们引用它的同时发生了变化。这就是为什么Rust要求引用的存在要锁定被引用内容和它的owner。