所有权(Ownership)是Rust编程语言的一个核心特性,它提供了一种确保内存安全的方式,而不需要垃圾收集器(GC)。所有权规则管理变量的生命周期,确保在适当的时间释放内存,防止内存泄漏。
所有权的基本原则
- 每个值都有一个所有者: 在Rust中,每个数据都有一个被称为其“所有者”的变量。
- 值有且只有一个所有者: 同一时间,一个数据只能被一个变量所拥有。
-
当所有者离开作用域时,其值将被丢弃(Drop): 当一个变量离开其作用域时,Rust自动调用
drop
函数,释放其拥有的资源。
所有权的关键概念
- 移动(Move): 当一个变量赋值给另一个变量时,所有权会从一个变量转移到另一个变量。原来的变量不再有效,不能继续使用。
-
克隆(Clone): 可以通过
.clone()
方法显式地复制数据,这样就会产生一个数据的深拷贝,并且两个变量都拥有各自的数据副本。 -
借用(Borrowing): 可以通过不可变引用(
&T
)或可变引用(&mut T
)来访问数据,而不转移所有权。不可变引用允许多个引用存在,但可变引用在同一时间只能有一个。 - 生命周期(Lifetimes): Rust通过生命周期来确保引用总是有效的。生命周期是编译时检查的一部分,它们不改变程序的运行时行为,但确保引用不会比它们指向的数据活得更久。
总结
就是一套独特的自成体系的内存管理机制,不像java完全靠垃圾回收自动处理,也不像C/C++要自己手动处理。
这是它独一无二,有别于其他语言的地方。我学过很多语言,这个机制是从没见过的。