From 624e928a482b3c56b82a6398aa991bc46f6886fd Mon Sep 17 00:00:00 2001 From: Unisko PENG Date: Tue, 16 May 2023 16:39:25 +0800 Subject: [PATCH] Update Ch15 --- projects/tree_demo/src/main.rs | 38 +++++++--------------------------- src/Ch15_Smart_Pointers.md | 24 +++------------------ 2 files changed, 11 insertions(+), 51 deletions(-) diff --git a/projects/tree_demo/src/main.rs b/projects/tree_demo/src/main.rs index aacc196..63bbdb0 100644 --- a/projects/tree_demo/src/main.rs +++ b/projects/tree_demo/src/main.rs @@ -15,37 +15,15 @@ fn main() { children: RefCell::new(vec! []), }); - println! ( - "叶子节点的强引用计数:{},弱引用计数:{}\n", - Rc::strong_count(&leaf), - Rc::weak_count(&leaf), - ); + println! ("叶子节点的父节点 = {:?}", leaf.parent.borrow().upgrade()); - { - let branch = Rc::new(Node { - value: 5, - parent: RefCell::new(Weak::new()), - children: RefCell::new(vec! [Rc::clone(&leaf)]), - }); + let branch = Rc::new(Node { + value: 5, + parent: RefCell::new(Weak::new()), + children: RefCell::new(vec! [Rc::clone(&leaf)]), + }); - *leaf.parent.borrow_mut() = Rc::downgrade(&branch); + *leaf.parent.borrow_mut() = Rc::downgrade(&branch); - println! ( - "枝干节点的强引用计数:{},弱引用计数:{}\n", - Rc::strong_count(&branch), - Rc::weak_count(&branch), - ); - println! ( - "叶子节点的强引用计数:{},弱引用计数:{}\n", - Rc::strong_count(&leaf), - Rc::weak_count(&leaf), - ); - - } - println! ("叶子节点的父节点 = {:?}\n", leaf.parent.borrow().upgrade()); - println! ( - "叶子节点的强引用计数:{},弱引用计数:{}\n", - Rc::strong_count(&leaf), - Rc::weak_count(&leaf), - ); + println! ("叶子节点的父节点 = {:?}", leaf.parent.borrow().upgrade()); } diff --git a/src/Ch15_Smart_Pointers.md b/src/Ch15_Smart_Pointers.md index 57d3d6c..377d772 100644 --- a/src/Ch15_Smart_Pointers.md +++ b/src/Ch15_Smart_Pointers.md @@ -1189,33 +1189,15 @@ struct Node { 文件名:`src/main.rs` ```rust -fn main() { - let leaf = Rc::new(Node { - value: 3, - parent: RefCell::new(Weak::new()), - children: RefCell::new(vec! []), - }); - - println! ("叶子节点的父节点 = {:?}", leaf.parent.borrow().upgrade()); - - let branch = Rc::new(Node { - value: 5, - parent: RefCell::new(Weak::new()), - children: RefCell::new(vec! [Rc::clone(&leaf)]), - }); - - *leaf.parent.borrow_mut() = Rc::downgrade(&branch); - - println! ("叶子节点的父节点 = {:?}", leaf.parent.borrow().upgrade()); -} +{{#include ../projects/tree_demo/src/main.rs:11:}} ``` *清单 15-28:对其父节点 `branch` 有弱引用的 `leaf` 节点* +创建 `leaf` 节点看起来与清单 15-27 相似,除了父字段:`leaf` 开始时没有父节点,所以我们创建一个新的、空的 `Weak` 引用实例。 -这个 `leaf` 节点的创建,与清单 15-27 类似,除了其中的 `parent` 字段:`leaf` 以不带父节点开始,因此这里创建了一个新的、空 `Weak` 引用实例。 +此时,当我们试图通过使用 `upgrade` 方法来获得对 `leaf` 的父节点的引用时,我们得到的是一个 `None` 值。我们在第一个 `println!` 语句的输出中看到了这一点: -到这里,在咱们尝试通过使用 `upgrade` 方法,获取 `leaf` 的父节点的引用时,就会得到一个 `None` 值。在首个 `println!` 语句的输出中,就看到了这点: ```console 叶子节点的父节点 = None