- 双向链表/图的反向指针:节点之间互相引用,且可能需要修改节点内容。
- 观察者模式/事件系统:多个观察者持有对主体的引用,主体状态变化时需要通知所有观察者,或者观察者需要更新自身状态。
- 缓存与惰性计算:多个所有者共享一个缓存对象,并在运行时更新缓存内容。
use std::{cell::RefCell, rc::Rc};
fn main() {
let v = Rc::new(RefCell::new(10)); // 创建一个可变的引用计数器
let v1 = v.clone(); // rc的引用计数器+1
println!("v 的值: {}", v1.borrow()); // 只读借用1
let v2 = v.clone(); // rc的引用计数器+1
*v2.borrow_mut() = 20; // 只写借用1
println!("v 的值: {}", v.borrow()); // 只读借用2
let v3 = v.clone(); // rc的引用计数器+1
*v3.borrow_mut() += 5; // 只写借用2
println!("v 的值: {}", v.borrow()); // 只读借用3
}