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, 智能指针, 引用计数, 堆分配
Instalação
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
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, 智能指针, 引用计数, 堆分配
user-invocable
false
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
Error
Don't Just Say
Ask 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:
What's the ownership model?
Single owner → Box or owned value
Shared ownership → Rc/Arc
Weak reference → Weak
What's the thread context?
Single-thread → Rc, Cell, RefCell
Multi-thread → Arc, Mutex, RwLock
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)
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