알아두면 좋은 것들(언리얼 관련 여러 잡다한 정보)

TObjectPtr<> 에 대하여

Turtle_Jun 2025. 7. 17. 12:57

과제 6,7번 풀이에서 

캡슐 컴포넌트 포인터를 할당하는데 나는

UCapsuleComponent* CapsuleComp; 를 통해 할당 받았는데 

 

풀이에선 

TObjectPtr<UCapsuleComponent> CapsuleComp; 로 선언을 한 것을 알 수 있었다.

해당 포인터는 UE5 에서 새로 도입된 스마트 포인터라고 한다.

 

두 방법의 차이는 아래 표와 같다.

TObjectPtr<UCapsuleComponent> CapsuleComp; UCapsuleComponent* CapsuleComp;
UE5 에서 도입된 템플릿 스마트 포인트 C++ 의 전통적인 원시(raw) 포인터
초기화 보장 (nullptr 등) 해당 기능 없음
대부분 상황에서 자동으로 raw pointer로 캐스팅 기존대로 사용
파괴 / GC와 관련된 에디터 도구가 더 잘동작 편의 기능 없음 직접 관리 필요
에디터 빌드에서 동적 해상도 및 접근 추적 지원 이런 관리 기능 없음
UPROPERTY 에서 UObject 파생 객체 참조시 사용을 추천 UE4 전통방식

 

언리얼에선 성능 및 안전성 등 여러 이점이 있어 해당 스마트 포인터 사용을 권장한다고한다.

 

TObjectPtr 변수는 함수에 전달할 때 암시적으로 해당 pointer로 변환을 해주므로 아래와 같은 상황처럼 사용할 수 있다.

void Foo(UCapsuleComponent* Component);

TObjectPtr<UCapsuleComponent> CapsuleComp;
Foo(CapsuleComp); // 가능!