第 7 章:智能指针与高级所有权

第 7 章:智能指针与高级所有权

7.1 Box<T>

Box 用于将数据分配到堆上,常用于递归类型。

let b = Box::new(5);
println!("{}", b);

7.2 Rc<T> 与共享所有权

Rc 提供单线程下的引用计数共享。适合树形结构等多个所有者场景。

use std::rc::Rc;
let a = Rc::new(String::from("hello"));
let b = Rc::clone(&a);

7.3 Arc<T> 与多线程共享

Arc 是线程安全版的 Rc,适用于多线程共享数据。

use std::sync::Arc;
let data = Arc::new(vec![1, 2, 3]);

7.4 RefCell<T> 与运行时借用检查

RefCell 提供运行时可变性检查,通常与 Rc 结合。

use std::cell::RefCell;
let data = RefCell::new(5);
*data.borrow_mut() += 1;

7.5 自定义智能指针

可以实现 DerefDrop

use std::ops::Deref;

struct MyBox<T>(T);

impl<T> Deref for MyBox<T> {
    type Target = T;
    fn deref(&self) -> &T {
        &self.0
    }
}
  • Deref 允许类型像引用一样使用
  • Drop 用于自定义清理逻辑

7.6 练习

  • 实现一个简单的 List 数据结构
  • 使用 Rc<RefCell<T>> 构建可变共享节点
  • 观察 Rc::strong_count 的变化
posted on 2026-05-09 22:01  小樊童鞋  阅读(2)  评论(0)    收藏  举报