0
0
Rustprogramming~10 mins

Rc pointer in Rust - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Rc pointer
Create Rc pointer
Reference count = 1
Clone Rc pointer
Reference count += 1
Use Rc pointers
Drop one Rc pointer
Reference count -= 1
Reference count == 0?
NoKeep data alive
Yes
Free data
This flow shows how an Rc pointer is created, cloned to increase reference count, used, and dropped to decrease count until data is freed.
Execution Sample
Rust
use std::rc::Rc;

fn main() {
    let a = Rc::new(5);
    let b = Rc::clone(&a);
    println!("{} {}", a, b);
}
Creates an Rc pointer to 5, clones it, and prints both values.
Execution Table
StepActionRc PointerReference CountOutput
1Create Rc pointer a with value 5a1
2Clone Rc pointer a to ba, b2
3Print values of a and ba, b25 5
4End of scope, drop ba1
5End of scope, drop a, count 0, free data-0
💡 All Rc pointers dropped, reference count is 0, data is freed
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 4Final
aNoneRc(5), count=1Rc(5), count=2Rc(5), count=1Dropped
bNoneNoneRc(5), count=2DroppedDropped
Key Moments - 3 Insights
Why does cloning an Rc pointer not copy the data?
Cloning an Rc pointer only increases the reference count (see Step 2 in execution_table), it does not duplicate the actual data to save memory.
What happens when one Rc pointer is dropped but others still exist?
The reference count decreases by one (Step 4), but the data stays alive until all Rc pointers are dropped (Step 5).
Why do both a and b print the same value?
Because both Rc pointers point to the same data (Step 3), so printing either shows the same value.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the reference count after cloning Rc pointer a to b?
A2
B0
C1
D3
💡 Hint
Check Step 2 in the execution_table where cloning increases the count.
At which step does the data get freed?
AStep 4
BStep 5
CStep 3
DNever
💡 Hint
Look at the exit_note and Step 5 in the execution_table.
If we did not clone a to b, what would be the reference count after Step 1?
A0
B2
C1
DUndefined
💡 Hint
Check Step 1 in the execution_table where only a exists.
Concept Snapshot
Rc pointer in Rust:
- Use Rc::new(value) to create a reference-counted pointer.
- Cloning Rc increases reference count, not data copy.
- Data is freed when reference count reaches zero.
- Useful for shared ownership in single-threaded contexts.
Full Transcript
This visual execution traces how Rust's Rc pointer works. First, an Rc pointer 'a' is created with value 5 and reference count 1. Then, cloning 'a' to 'b' increases the count to 2. Both pointers print the same value 5 because they share ownership. When 'b' is dropped, count decreases to 1, and finally dropping 'a' reduces count to 0, freeing the data. This shows how Rc manages shared ownership by counting references and freeing data only when none remain.