rust智能指针与内部可变性

本文介绍了Rust中的智能指针Box、Rc和RefCell,以及内部可变性的概念。Box提供了堆上的所有权,支持不可变和可变引用。Rc通过引用计数实现多重所有权,但不支持可变引用。RefCell则通过内部借用实现可变性,即使在不可变上下文中。此外,文章还讨论了如何通过Rc和RefCell实现内部可变性,并通过计数器和链表的例子进行了说明。
摘要由CSDN通过智能技术生成

rust的三种智能指针 Box Rc RefCell

一个智能指针,如果实现了Deref trait,相当于其内部数据的一个不可变引用

 

即 let mut ptr = Rc::new(5); ptr 等于 ptr.deref(),这应该是编译器会自动进行的

如果该智能指针实现了DerefMut trait,则该智能指针等价于其内部数据的一个可变引用

 

即 let mut ptr = Box::new(5); ptr 等于 ptr.deref_mut(),这应该是编译器会自动进行的

智能指针Box

智能指针Box持有其在堆上存储数据的所有权,等价于C++中的unique_ptr,在rust中实现了

Deref trait 和 DerefMut trait,所以可以对Box中的值进行访问和更改。

let mut ptr = Box::new(5);
let val = *ptr;    //访问
*ptr = 10;    //修改

智能指针Rc

智能指针Rc通过引用计数来实现多重所有权(每一个拥有Rc的都拥有其所有权,尽管它保存的是同一块堆内存),类似于C++中的shared_ptr。与shared_ptr不同的是,shared_ptr允许对其中的变量进行访问或修改(若其中变量不是const);而Rc没有实现

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值