rust语言学习笔记(指针四)Rc<RefCell<T>>(单线程共享可变性)

  • 双向链表/图的反向指针‌:节点之间互相引用,且可能需要修改节点内容。
  • 观察者模式/事件系统‌:多个观察者持有对主体的引用,主体状态变化时需要通知所有观察者,或者观察者需要更新自身状态。
  • 缓存与惰性计算‌:多个所有者共享一个缓存对象,并在运行时更新缓存内容。
rust 复制代码
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
}