3.2 `Rc`
02-
Rc — Comprehensive Rust1分钟内可阅读完
译文 · 基于 Comprehensive Rust
原文链接: https://google.github.io/comprehensive-rust/smart-pointers/rc.html
3.2 Rc
Rc 是引用计数的共享指针。当你需要从多处引用同一份数据时使用它:
| |
每个 Rc 都指向同一个共享数据结构,其中包含强/弱指针计数以及值本身:
Stack Heap
.- - - - - - - -. .- - - - - - - - - - - - - - - - -.
: : : :
: +-----+ : : +-----------+-------------+ :
: a: | o---|---:--+--:-->| count: 2 | value: 10 | :
: +-----+ : | : +-----------+-------------+ :
: b: | o---|---:--+ : :
: +-----+ : `- - - - - - - - - - - - - - - - -'
: :
`- - - - - - - -'
Rc的计数确保只要还有引用,其包含的值就一直有效。- Rust 中的
Rc类似 C++ 的std::shared_ptr。Rc::clone很便宜:它创建指向同一分配的指针并增加引用计数。不会做深克隆,在排查性能问题时通常可以忽略。make_mut在必要时会实际克隆内部值(「写时克隆」)并返回可变引用。- 用
Rc::strong_count可查看引用计数。Rc::downgrade给你一个_弱引用计数_对象,用于创建会被正确丢弃的循环(通常与RefCell配合)。