mirror of
https://github.com/rust-lang-cn/book-cn.git
synced 2025-01-23 07:20:20 +08:00
Update src/ch15-06-reference-cycles.md
This commit is contained in:
parent
4caa900f40
commit
02d754742b
@ -100,9 +100,7 @@ b rc count after changing a = 2
|
||||
a rc count after changing a = 2
|
||||
```
|
||||
|
||||
可以看到将 `a` 修改为指向 `b` 之后,`a` 和 `b` 中都有的 `Rc<List>` 实例的引用计数为 2。在 `main` 的结尾,Rust 会尝试首先丢弃 `b`,这会使 `a` 和 `b` 中 `Rc<List>` 实例的引用计数减 1。
|
||||
|
||||
然而,因为 `a` 仍然引用 `b` 中的 `Rc<List>`,`Rc<List>` 的引用计数是 1 而不是 0,所以 `Rc<List>` 在堆上的内存不会被丢弃。其内存会因为引用计数为 1 而永远停留。为了更形象的展示,我们创建了一个如图 15-4 所示的引用循环:
|
||||
可以看到将列表 `a` 修改为指向 `b` 之后, `a` 和 `b` 中的 `Rc<List>` 实例的引用计数都是 2。在 `main` 的结尾,Rust 首先丢弃变量 `b`,这会使 `b` 中 `Rc<List>` 实例的引用计数减 1。然而,因为 `a` 仍然引用 `b` 中的 `Rc<List>`,`Rc<List>` 的引用计数是 1 而不是 0,所以 `b` 中的 `Rc<List>` 在堆上的内存不会被丢弃。接下来 Rust 会丢弃 `a`,同理这会将 `a` 中 `Rc<List>` 实例的引用计数从 2 减为 1。这个实例的内存也不能被丢弃,因为其他的 `Rc<List>` 实例仍在引用它。这些列表的内存将永远保持未被回收的状态。为了更形象地展示,我们创建了一个如图 15-4 所示的引用循环:
|
||||
|
||||
<img alt="Reference cycle of lists" src="img/trpl15-04.svg" class="center" />
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user