所有权和生命周期
所有权是Rust的一个突破性功能。它让Rust可以彻底告别垃圾回收,同时做到内存安全和高效率。在涉及到所有权系统的细节之前,我们先看一下这种设计的目的。
但是,无论你怎么看待GC,它确实是保证代码安全的大杀器。你永远不需要担心有什么内容会被过早释放(尽管有的时候你已经不想再使用它们了……)。这是C和C++会普遍遇到的问题。看一下这个曾纠缠过每一个使用过非GC语言的人的简单错误:
这种事情永远不会发生在Rust的世界。Rust需要程序员向编译器保证自己代码的健壮性。
let mut data = vec![1, 2, 3];
// 获得内部引用
// 哎呀!push方法导致data的内部存储位置重新分配了
// (当然这段代码在Rust中不能编译)
println!("{}", x);
简单地分析作用域不足以防止这个bug,因为data
在我们使用它的范围内确实是一直存在的。但是它在我们引用它的同时发生了变化。这就是为什么Rust要求引用的存在要锁定被引用内容和它的owner。