From 4235916db46fe08c5156f5268762b5c720495036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=A4=E7=8B=90=E4=B8=80=E5=86=B2?= <43949039+anonymousGiga@users.noreply.github.com> Date: Thu, 18 May 2023 10:22:13 +0800 Subject: [PATCH] Update chapter_3_16_7.md --- src/chapter_3/chapter_3_16_7.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/chapter_3/chapter_3_16_7.md b/src/chapter_3/chapter_3_16_7.md index bfe92e5..5260b9d 100644 --- a/src/chapter_3/chapter_3_16_7.md +++ b/src/chapter_3/chapter_3_16_7.md @@ -74,4 +74,14 @@ fn main() { ## 2. 使用弱引用Weak Weak类似于Rc,但它不持有所有权,它仅仅保存一份指向数据的弱引用。弱引用,就是不保证引用的对象存在,如果不存在,就返回一个 None。 下面为Weak和Rc的对比: +| Weak | Rc | +| ------------------------ | ------------------------ | +| 引用不计数 | 引用计数 | +| 不拥有所有权 | 拥有所有权 | +| 不阻止值被释放 | 阻止值被释放 | +|引用的值存在返回Some,不存在返回None | 引用的值必定存在 | +|通过upgrade取到Option>,然后取值|通过Deref自动解引用,取值无需任何操作| + + +对于上一节中循环链表的例子,使用Weak实现为如下: