diff --git a/book/smart_pointers/src/main.rs b/book/smart_pointers/src/main.rs index 3ab7230..09706e7 100644 --- a/book/smart_pointers/src/main.rs +++ b/book/smart_pointers/src/main.rs @@ -1,4 +1,7 @@ use std::ops::Deref; +use std::rc::Rc; + +use crate::List::{Cons, Nil}; struct MyBox(T); @@ -26,6 +29,11 @@ impl Drop for CustomSmartPointer { } } +enum List { + Cons(i32, Rc), + Nil, +} + fn hello(name: &str) { println!("Hello, {}!", name); } @@ -49,4 +57,14 @@ fn main() { println!("CustomSmartPointers created."); drop(c); println!("CustomSmartPointer dropped before the end of main."); + + let a = Rc::new(Cons(5, Rc::new(Cons(10, Rc::new(Nil))))); + println!("count after creating a = {}", Rc::strong_count(&a)); + let b = Cons(3, Rc::clone(&a)); + println!("count after creating b = {}", Rc::strong_count(&a)); + { + let c = Cons(4, Rc::clone(&a)); + println!("count after creating c = {}", Rc::strong_count(&a)); + } + println!("count after c goes out of scope = {}", Rc::strong_count(&a)); } \ No newline at end of file