1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-03-20 14:31:15 +02:00

Add a picture to Rc (#2583)

I suppose my `svgbob` skills leave a bit to be desired, but I think the
meaning is clear:


![image](https://github.com/user-attachments/assets/09fa2ebd-7364-4d23-bc97-6e7e81a9c82e)

Now that I look through the `Rc` implementation, there's a weak count
for every strong count, so the `weak: 0` here is inaccurate. But, maybe
this is too much of an implementation detail? Should I just concentrate
on strong refs? I suppose I could put a `...` in that upper-right box,
to suggest there's more going on here?
This commit is contained in:
Dustin J. Mitchell 2025-01-23 09:28:20 -05:00 committed by GitHub
parent 4ce87c5473
commit 9c03d51b74
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -19,6 +19,22 @@ fn main() {
}
```
Each `Rc` points to the same shared data structure, containing strong and weak
pointers and the value:
```bob
Stack Heap
.- - - - - - - -. .- - - - - - - - - - - - - - - - -.
: : : :
: +-----+ : : +-----------+-------------+ :
: a: | o---|---:--+--:-->| count: 2 | value: 10 | :
: +-----+ : | : +-----------+-------------+ :
: b: | o---|---:--+ : :
: +-----+ : `- - - - - - - - - - - - - - - - -'
: :
`- - - - - - - -'
```
- See [`Arc`][2] and [`Mutex`][3] if you are in a multi-threaded context.
- You can _downgrade_ a shared pointer into a [`Weak`][4] pointer to create
cycles that will get dropped.