|
|
|
@ -23,7 +23,7 @@
|
|
|
|
|
|
|
|
|
|
列表 `a` 包含 5 之后是 10,之后是另两个列表:`b` 从 3 开始而 `c` 从 4 开始。`b` 和 `c` 会接上包含 5 和 10 的列表 `a`。换句话说,这两个列表会尝试共享第一个列表所包含的 5 和 10。
|
|
|
|
|
|
|
|
|
|
尝试使用 `Box<T>` 定义的 `List` 并实现不能工作,如示例 15-17 所示:
|
|
|
|
|
尝试使用 `Box<T>` 定义的 `List` 实现并不能工作,如示例 15-17 所示:
|
|
|
|
|
|
|
|
|
|
<span class="filename">文件名: src/main.rs</span>
|
|
|
|
|
|
|
|
|
@ -61,7 +61,7 @@ error[E0382]: use of moved value: `a`
|
|
|
|
|
the `Copy` trait
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`Cons` 成员拥有其储存的数据,所以当创建 `b` 列表时,`a` 被移动进了 `b` 这样 `b` 就拥有了 `a`。接着当再次尝使用 `a` 创建 `c` 时,这不被允许因为 `a` 的所有权已经被移动。
|
|
|
|
|
`Cons` 成员拥有其储存的数据,所以当创建 `b` 列表时,`a` 被移动进了 `b` 这样 `b` 就拥有了 `a`。接着当再次尝试使用 `a` 创建 `c` 时,这不被允许,因为 `a` 的所有权已经被移动。
|
|
|
|
|
|
|
|
|
|
可以改变 `Cons` 的定义来存放一个引用,不过接着必须指定生命周期参数。通过指定生命周期参数,表明列表中的每一个元素都至少与列表本身存在的一样久。例如,借用检查器不会允许 `let a = Cons(10, &Nil);` 编译,因为临时值 `Nil` 会在 `a` 获取其引用之前就被丢弃了。
|
|
|
|
|
|
|
|
|
|