rust - Rc::clone(&pointer) 如何增加引用计数?
问题描述
我看不出应该如何实现以下代码:
let a = Rc::new(5);
let b = Rc::clone(&a);
let c = Rc::clone(&a);
Rc::clone
获取对 的不可变引用a
,但以某种方式设法增加其引用计数(这需要可变引用?)。
我尝试检查Rc
(参见此处)的源代码,但以我目前有限的知识还无法理解它。
这是因为它unsafe
在后台使用代码,还是发生了其他事情?
解决方案
在引擎盖下,Rc
使用Cell
,它可以实现内部可变性:
struct RcBox<T: ?Sized> {
strong: Cell<usize>,
weak: Cell<usize>,
value: T,
}
最终,条条大路通Cell::replace
。它不可避免地有一个不安全的块:
mem::replace(unsafe { &mut *self.value.get() }, val)
所以是的,你的直觉是对的!
推荐阅读
- ruby-on-rails - 如何在 PhusionPassenger.on_event() 分叉后插入代码
- ruby-on-rails - 使用 Bootstrap 组件扩展 Trix
- java - 将两个表视图绑定在一起,但由于内容行高不同导致索引不匹配
- git - Git 强制提交和推送,当得到“没有提交”
- android - 从 Google Play 获取付费应用的购买令牌
- swift - “不支持可变枚举案例” swift 5 错误
- r - 有没有比 fread() 更快的方法来读取大数据?
- javascript - 根据数字输入部署多个 div
- spring - Spring boot OneToOne 关系问题
- spring-boot - 尝试向外部端点发送后请求时过早关闭连接