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, 智能指针, 引用计数, 堆分配
설치
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
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