Skip to content
m02-resource logo

Resource Management

m02-resource

CRITICAL: Use for smart pointers and resource management. Triggers: Box, Rc, Arc, Weak, RefCell, Cell, smart pointer, heap allocation, reference counting, RAII, Drop, should I use Box or Rc, when to use Arc vs Rc, 智能指针, 引用计数, 堆分配

actionbook/rust-skills3.1Kinstalls1.5KstarsRust

SKILL.md

Full skill instructions

Resource Management

Layer 1: Language Mechanics

Core Question

What ownership pattern does this resource need?

Before choosing a smart pointer, understand:

  • Is ownership single or shared?
  • Is access single-threaded or multi-threaded?
  • Are there potential cycles?

Error → Design Question

ErrorDon't Just SayAsk Instead
"Need heap allocation""Use Box"Why can't this be on stack?
Rc memory leak"Use Weak"Is the cycle necessary in design?
RefCell panic"Use try_borrow"Is runtime check the right approach?
Arc overhead complaint"Accept it"Is multi-thread access actually needed?

Thinking Prompt

Before choosing a smart pointer:

  1. What's the ownership model?

    • Single owner → Box or owned value
    • Shared ownership → Rc/​Arc
    • Weak reference → Weak
  2. What's the thread context?

    • Single-thread → Rc, Cell, RefCell
    • Multi-thread → Arc, Mutex, RwLock
  3. Are there cycles?

    • Yes → One direction must be Weak
    • No → Regular Rc/​Arc is fine

Trace Up ↑

When pointer choice is unclear, trace to design:

"Should I use Arc or Rc?"
    ↑ Ask: Is this data shared across threads?
    ↑ Check: m07-concurrency (thread model)
    ↑ Check: domain-* (performance constraints)
SituationTrace ToQuestion
Rc vs Arc confusionm07-concurrencyWhat's the concurrency model?
RefCell panicsm03-mutabilityIs interior mutability right here?
Memory leaksm12-lifecycleWhere should cleanup happen?

Trace Down ↓

From design to implementation:

"Need single-owner heap data"
    ↓ Use: Box<T>

"Need shared immutable data (single-thread)"
    ↓ Use: Rc<T>

"Need shared immutable data (multi-thread)"
    ↓ Use: Arc<T>

"Need to break reference cycle"
    ↓ Use: Weak<T>

"Need shared mutable data"
    ↓ Single-thread: Rc<RefCell<T>>
    ↓ Multi-thread: Arc<Mutex<T>> or Arc<RwLock<T>>

Quick Reference

TypeOwnershipThread-SafeUse When
Box<T>SingleYesHeap allocation, recursive types
Rc<T>SharedNoSingle-thread shared ownership
Arc<T>SharedYesMulti-thread shared ownership
Weak<T>Weak refSame as Rc/​ArcBreak reference cycles
Cell<T>SingleNoInterior mutability (Copy types)
RefCell<T>SingleNoInterior mutability (runtime check)

Decision Flowchart

Need heap allocation?
├─ Yes → Single owner?
│        ├─ Yes → Box<T>
│        └─ No → Multi-thread?
│                ├─ Yes → Arc<T>
│                └─ No → Rc<T>
└─ No → Stack allocation (default)

Have reference cycles?
├─ Yes → Use Weak for one direction
└─ No → Regular Rc/​Arc

Need interior mutability?
├─ Yes → Thread-safe needed?
│        ├─ Yes → Mutex<T> or RwLock<T>
│        └─ No → T: Copy? → Cell<T> : RefCell<T>
└─ No → Use &mut T

Common Errors

ProblemCauseFix
Rc cycle leakMutual strong refsUse Weak for one direction
RefCell panicBorrow conflict at runtimeUse try_borrow or restructure
Arc overheadAtomic ops in hot pathConsider Rc if single-threaded
Box unnecessaryData fits on stackRemove Box

Anti-Patterns

Anti-PatternWhy BadBetter
Arc everywhereUnnecessary atomic overheadUse Rc for single-thread
RefCell everywhereRuntime panicsDesign clear ownership
Box for small typesUnnecessary allocationStack allocation
Ignore Weak for cyclesMemory leaksDesign parent-child with Weak

Related Skills

WhenSee
Ownership errorsm01-ownership
Interior mutability detailsm03-mutability
Multi-thread contextm07-concurrency
Resource lifecyclem12-lifecycle

More Rust skills

Ultra-fast Python package installer and resolver written in Rust, 10-100x faster than pip.

40.2K 14.4K
View

Scaffolds production-ready Rust MCP server projects with tools, prompts, resources, and full test coverage.

39.7K 9.3K
View
how logo
Rust

how

Use for \"how does X work\", code walkthroughs before changing something, and placement / ownership / layering questions (\"where should this live\", \"which package owns this\", \"is this the right layer\"). Explains subsystem architecture, runtime flow, onboarding mental mod...

9.9K 4.4K
View

Coding & apps AI tools

Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View
Imagica logo
Coding & apps

Imagica

Build a no-code AI app in minutes.

Freemium
View
E
Coding & apps

Emergent.sh

An IDE for code migration from legacy to modern frameworks through coding agents.

Freemium
View
Wonder Dynamics logo
Coding & apps

Wonder Dynamics

Automate CGI animation in live-action scenes

Paid
View
M
Coding & apps

Mixo

Launch a website in seconds with AI.

Paid
View
AI Code Convert logo
Coding & apps

AI Code Convert

Streamline Your Coding Experience with AI Code Helper

Free
View