From dcbcc6dbd10f20b69c0f1641aa3ea160bfc0e6ef Mon Sep 17 00:00:00 2001 From: sgoudham Date: Sat, 12 Feb 2022 22:39:32 +0000 Subject: [PATCH] Implement Rc --- book/smart_pointers/src/main.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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