From 834e1c28cf8bbe0cdc5a6abd28afe3fd6c6d9eb9 Mon Sep 17 00:00:00 2001 From: KaiserY Date: Wed, 13 Oct 2021 10:46:46 +0800 Subject: [PATCH] update ch15-06 close #546 --- src/ch15-06-reference-cycles.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ch15-06-reference-cycles.md b/src/ch15-06-reference-cycles.md index eecce24..0a34a58 100644 --- a/src/ch15-06-reference-cycles.md +++ b/src/ch15-06-reference-cycles.md @@ -103,9 +103,7 @@ b rc count after changing a = 2 a rc count after changing a = 2 ``` -可以看到将 `a` 修改为指向 `b` 之后,`a` 和 `b` 中都有的 `Rc` 实例的引用计数为 2。在 `main` 的结尾,Rust 会尝试首先丢弃 `b`,这会使 `a` 和 `b` 中 `Rc` 实例的引用计数减 1。 - -然而,因为 `a` 仍然引用 `b` 中的 `Rc`,`Rc` 的引用计数是 1 而不是 0,所以 `Rc` 在堆上的内存不会被丢弃。其内存会因为引用计数为 1 而永远停留。为了更形象的展示,我们创建了一个如图 15-4 所示的引用循环: +可以看到将列表 `a` 修改为指向 `b` 之后, `a` 和 `b` 中的 `Rc` 实例的引用计数都是 2。在 `main` 的结尾,Rust 首先丢弃变量 `b`,这会使 `b` 中 `Rc` 实例的引用计数减 1。然而,因为 `a` 仍然引用 `b` 中的 `Rc`,`Rc` 的引用计数是 1 而不是 0,所以 `b` 中的 `Rc` 在堆上的内存不会被丢弃。接下来 Rust 会丢弃 `a`,这同理会将 `a` 中 `Rc` 实例的引用计数从 2 减为 1。这个实例的内存也不能被丢弃,因为其他的 `Rc` 实例仍在引用它。这些列表的内存将永远保持未被回收的状态。为了更形象的展示,我们创建了一个如图 15-4 所示的引用循环: Reference cycle of lists