为释放责任建立规则
资源被取得以后,程序需要确定谁负责在不再使用时处理它。所有权规则把这种责任与程序中的值或管理对象关联,避免只留下可以访问资源的地址,却没有一致的释放约定。
Rust入门规则规定每个值有一个所有者,所有者离开其适用的作用域时值会被丢弃。以拥有堆上缓冲区的String为例,清理逻辑由其所有权与Drop行为共同承担,而不是要求使用者在每条返回路径手写释放。
移动、复制与借用分别处理
把Rust的String绑定给另一个变量,通常会移动所有权,使旧绑定不能再按原方式使用。它不意味着自动深拷贝整个缓冲区;显式clone可以取得独立副本,具体复制成本仍依类型实现而定。
借用则允许暂时通过引用访问值,而不把最终清理责任交给借用者。共享引用与独占可变引用受到不同约束,因而“可以访问”“可以修改”和“负责释放”并不是同一种权限。