要所有权系统干啥? 管理内存…
0. Rust的承诺
- 我们决定程序中每个值能活多久, 并控制Rust回收该值拥有的内存和其他资源
- 释放后, 就不能被指针指向.
如何做到呢?
靠所有权和移动语义以及下章的lifetime
-
所有权
-
Moves
- index
-
Copy: Exception of Moves
-
Shared Ownership: Rc and Arc
1. 所有权 Ownership
- Rust中每个值只有一个拥有者, 并且拥有者决定值的生命周期.
- 当变量离开其声明的控制块就被释放了.
我们会有一个所有权树, 这个树不是数据结构中的树.
2. 移动语义 Move
对于绝大多数类型, 赋值会将所有权从右值移动到左值.
右值就变成了未初始化.
1. 一些注意
moves是对value而言, 而不是堆上数据.
即对于String, 移动的是栈上数据,而不是堆上的数据.
2. index中的Move
let v = vec!["a".to_string(), "b".to_string()];
let a = v[0];
Rust不允许这个v[0]
操作.
要是把所有权移出去了, v[