rust - Rc::clone(&pointer) 如何增加引用计数?

标签 rust

我看不出下面的代码应该如何实现:

let a = Rc::new(5);
let b = Rc::clone(&a);
let c = Rc::clone(&a);

Rc::clone 采用对 a 的不可变引用,但以某种方式设法增加其引用计数(这需要可变引用?)。

我尝试检查 Rc ( see here ) 的源代码,但以我目前有限的知识还无法理解它。

之所以可行,是因为它在幕后使用了不安全代码,还是其他原因?

最佳答案

在引擎盖下,Rc 使用 Cell,它支持内部可变性:

struct RcBox<T: ?Sized> {
    strong: Cell<usize>,
    weak: Cell<usize>,
    value: T,
}

最终,条条大路通Cell::replace .它不可避免地有一个不安全的 block :

mem::replace(unsafe { &mut *self.value.get() }, val)

是的,您的直觉是正确的!

关于rust - Rc::clone(&pointer) 如何增加引用计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58004777/

相关文章:

rust - Rust wasm 中的 Closure::new 和 Closure::wrap 有什么区别

rust - 迭代并从 Options 向量中获取

rust - 为什么删除返回给我一个错误 : expected type `()` but found type

rust - 我如何生成一个随机 num::BigUint?

ssl - Tokio Tls 自签名证书

rust - 为什么'static是impl的默认返回类型

reference - RefCell<X> 和 RefCell<&X> 上的 borrow_mut 之间的区别

json - 如何将所有字段都是默认值的类型反序列化为 None ?

rust - 发送要构造的宏的枚举变量

tree - 有没有办法遍历可变树以获得随机节点?