study_example/smart_pointer/
rc_t_count_pointer.rs1use super::box_pointer::List;
3use std::rc::Rc;
4
5fn multi_pointer_one_box_data() {
6 let a = List::Cons(5, Box::new(List::Cons(10, Box::new(List::Nil))));
7 let b = List::Cons(15, Box::new(a));
8 }
11
12#[derive(Debug)]
13pub enum RcList {
14 Cons(i32, Rc<RcList>),
15 Nil,
16}
17
18fn multi_pointer_one_rc_counter() {
29 let a = Rc::new(RcList::Cons(
30 5,
31 Rc::new(RcList::Cons(10, Rc::new(RcList::Nil))),
32 ));
33 println!("crate a: Rc::strong_count(&a) = {}", Rc::strong_count(&a));
34 let b = RcList::Cons(15, Rc::clone(&a));
36 println!(
37 "crate b and after clone a: Rc::strong_count(&a) = {}",
38 Rc::strong_count(&a)
39 );
40 let c = RcList::Cons(18, Rc::clone(&a));
41 println!(
42 "crate c and after clone a: Rc::strong_count(&a) = {}",
43 Rc::strong_count(&a)
44 );
45 println!("multi_pointer_one_rc_data b: {:?}", b);
46 println!("multi_pointer_one_rc_data c: {:?}", c);
47 {
48 let d = RcList::Cons(21, Rc::clone(&a));
49 println!(
50 "crate d and after clone d: Rc::strong_count(&a) = {}",
51 Rc::strong_count(&a)
52 );
53 }
54 println!(
55 "leving d scope: Rc::strong_count(&a) = {}",
56 Rc::strong_count(&a)
57 );
58}
59
60pub fn rc_t_count_pointer_study() {
61 multi_pointer_one_box_data();
62 multi_pointer_one_rc_counter();
63}