
UObject 기반 객체를 위한 스마트 포인터| 참조 타입 | 역할 | 특징 |
|---|---|---|
UPROPERTY() | 강한 참조 | 가장 일반적인 UObject 참조 방식, 해당 매크로가 붙은 raw 포인터는 GC에게 객체가 사용 중이라고 알려주는 강한 참조 |
TObjectPtr | 강한 참조 | raw 포인터를 대체하며 안전성과 성능을 향상시킨 버전, UPROPERTY()와 함께 사용되어 강한 참조의 역할 |
TWeakObjectPtr | 약한 참조 | GC에 의해 추적되지만, 객체의 메모리 회수를 방해하지 않음, GC가 객체를 삭제하면 이 포인터는 nullptr로 설정됨 |
TSoftObjectPtr | 소프트 참조 | 에셋의 주소(경로)만 가지고 있으며, 현재 메모리에 로드되어 있는지 여부와 상관없이 참조를 유지할 수 있음, 필요할 때 명시적으로 로드하는 방식(비동기 로딩)으로 메모리 최적화에 사용됨 |
TSoftClassPtr | 소프트 클래스 참조 | 클래스 타입에 대한 소프트 참조, 실제 클래스가 아닌 클래스의 경로를 참조하며, 필요할 때 로드하여 UClass*로 사용할 수 있음 |
UObject를 상속받지 않는 일반적인 C++ 클래스나 구조체의 동적 할당 메모리를 관리하는 데 사용| 스마트 포인터 | 역할 | 특징 | C++ 표준 대응 |
|---|---|---|---|
TSharedPtr | 공유 소유권 | 여러 포인터가 동일한 객체를 공유, 참조 카운트가 0이 될 때 메모리를 해제, 순환 참조 발생 위험 | std::shared_ptr |
TSharedRef | 공유 필수 참조 | TSharedPtr와 동일하게 작동, 절대 nullptr이 될 수 없는 참조, 객체가 항상 존재함을 보장 | 대응하는 표준 없음 |
TWeakPtr | 약한 참조 | TSharedPtr로 관리되는 객체를 참조하며, 참조 카운트를 증가시키지 않음, 순환 참조를 끊는 용도로 사용됨 ( Pin() 함수를 사용해서 승격해서 사용 ) | std::weak_ptr |
TUniquePtr | 고유 소유권 | 하나의 포인터만이 객체에 대한 소유권을 가짐, 소유권을 이동할 수는 있지만 복사는 불가능, 소유 포인터가 스코프를 벗어나면 자동으로 메모리 해제 | std::unique_ptr |