diff options
Diffstat (limited to 'smart_pointer/src')
-rw-r--r-- | smart_pointer/src/main.rs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/smart_pointer/src/main.rs b/smart_pointer/src/main.rs index d0be410..6778671 100644 --- a/smart_pointer/src/main.rs +++ b/smart_pointer/src/main.rs @@ -1,6 +1,7 @@ // Recursive type using boxes +use std::rc::Rc; enum List { - Cons(i32, Box<List>), + Cons(i32, Rc<List>), Nil, } @@ -38,7 +39,7 @@ fn main() { println!("b = {}", b); use crate::List::{Cons, Nil}; - let list = Cons(1, Box::new(Cons(2, Box::new(Cons(3, Box::new(Nil)))))); + let list = Cons(1, Rc::new(Cons(2, Rc::new(Cons(3, Rc::new(Nil)))))); // Dereferencing let x = 5; @@ -79,4 +80,14 @@ fn main() { println!("CustomSmartPointer 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)); } |