2.1 共享只读数据(单线程)
usestd::rc::Rc;fnmain(){letv=Rc::new(10);// 创建一个 Rc 指针,初始引用计数为 1letv2=Rc::clone(&v);// 创建一个 Rc 指针,引用计数增加 1,(推荐写法)letv3=v.clone();// 创建一个 Rc 指针,引用计数增加 1// *v 是解引用操作,类型是 i32letvalue:i32=*v;println!("*v 的类型是 i32,值: {}",value);// v 是 Rc<i32> 类型,是智能指针// 但 Debug trait 会自动解引用打印内部值println!("v 的类型是 Rc<i32>,Debug 打印: {:?}",v);println!("v2 的类型是 Rc<i32>,Debug 打印: {:?}",v2);println!("v3 的类型是 Rc<i32>,Debug 打印: {:?}",v3);println!("引用计数: {}",Rc::strong_count(&v));}
2.2 构建递归数据结构(如链表、树)
usestd::rc::Rc;#[derive(Debug)]enumList{Cons(i32,Rc<List>),Nil,}usecrate::List::{Cons,Nil};fnmain(){letlist1=Rc::new(Cons(1,Rc::new(Nil)));letlist2=Cons(2,Rc::clone(&list1));// 共享 list1 的所有权letlist3=Cons(3,Rc::clone(&list1));// 共享 list1 的所有权println!("{:?}",list2);println!("{:?}",list3);}