스마트 포인터
Summary
Unreal의 스마트 포인터 라이브러리는 주로 UObject가 아닌 일반 C++ 타입을 위한 소유권 모델이다. TSharedPtr, TSharedRef, TWeakPtr는 강력하지만 UObject 수명 관리와는 별개라는 점이 가장 중요하다.
포함된 공식 주제
Unreal Smart Pointer LibraryShared PointersShared ReferencesWeak Pointers
When You Use This
UI 모델, 비UObject 서비스, 파서 결과물처럼 순수 C++ 객체를 여러 곳에서 공유해야 할 때 읽는다.
Core Concept
TSharedPtr는 nullable 공유 소유권, TSharedRef는 null이 될 수 없는 공유 참조, TWeakPtr는 순환 참조를 끊거나 생존 여부만 확인하는 약한 참조다. 이들은 레퍼런스 카운팅 기반이며, UObject GC와는 다른 체계다.
Example
TSharedPtr<FInventoryViewModel> ViewModel = MakeShared<FInventoryViewModel>();
TWeakPtr<FInventoryViewModel> WeakViewModel = ViewModel;
Explanation
이 패턴은 Slate, 에디터 도구, 순수 C++ 데이터 모델에서 자주 보인다. 반대로 UObject를 같은 방식으로 감싸면 언리얼의 GC 모델과 충돌하므로, UObject는 TObjectPtr 계열로 생각하는 편이 맞다.
Common Mistakes
- UObject까지
TSharedPtr로 관리하려 한다. - 약한 포인터를 잠그기 전에 항상 유효성을 확인해야 한다는 점을 잊는다.