WHAT - Rust 智能指针

在 Rust 中,智能指针(Smart Pointers) 是对普通指针的封装,除了指向某个值,它们还拥有额外的行为(比如自动释放资源、共享所有权、内变性等)。

智能指针在 Rust 中广泛用于内存管理和所有权系统。

常见的智能指针类型

1. Box<T> — 堆上分配的数据

  • 用途:将数据存储在堆上,适用于大小不确定的类型(如递归类型)。
  • 特点:唯一所有权,开销小,支持解引用。
let b = Box::new(5);
println!("{}", *b);  // 解引用输出 5

2. Rc<T> — 引用计数的共享所有权(单线程)

  • 用途:多个所有者共享同一份堆内数据(适用于不可变数据)。
  • 特点:只适用于单线程,不可变共享,内部使用引用计数。
use std::rc::Rc;

let a = Rc::new(5);
let b = Rc::clone(&a);
println!("Count: {}", Rc::strong_count(&a)); // Count: 2

3. Arc<T> — 原子引用计数(多线程)

  • 用途:在多线程中安全共享所有权。
  • 特点:线程安全(用原子操作实现),开销比 Rc 大。
use std::sync::Arc;
use std::thread;

let a = Arc::new(5);
let b = Arc::clone(&a);
thread::spawn(move || {
    println!("From thread: {}", b);
});

4. RefCell<T> — 运行时可变借用(单线程)

  • 用途:在不可变环境中实现内部可变性(Interior Mutability)。
  • 特点:运行时检查借用规则,适合单线程。
  • 常与 Rc 一起用来构建复杂结构(如图、树)。
use std::cell::RefCell;

let x = RefCell::new(5);
*x.borrow_mut() = 10;
println!("{}", x.borrow());  // 输出 10

5. Mutex<T>RwLock<T> — 多线程的可变共享

  • 用途:实现线程间的可变访问控制。
  • Mutex<T>:一次只能一个线程访问。
  • RwLock<T>:可以多个读者或一个写者。
use std::sync::Mutex;

let data = Mutex::new(5);
{
    let mut guard = data.lock().unwrap();
    *guard = 10;
}
println!("{:?}", data.lock().unwrap());  // 输出 10

综合对比表

类型所有权共享可变性是否线程安全应用场景
Box<T>堆分配、递归结构
Rc<T>单线程多所有者共享
Arc<T>多线程共享数据
RefCell<T>单线程内部可变性
Mutex<T>多线程可变性控制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@PHARAOH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值