과제 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); // 가능!
'알아두면 좋은 것들(언리얼 관련 여러 잡다한 정보)' 카테고리의 다른 글
| 언리얼 오브젝트 풀링 이란 (3) | 2025.08.19 |
|---|---|
| TSubclassOf<> 에 대하여 (1) | 2025.08.08 |
| 블루프린트에 있는 캐릭터 Move를 C++ 로 옮기기 (1) | 2025.08.05 |
| 7번 과제에서 했던 회전 행렬 구하는 FRotationMatrix 에 대하여 (0) | 2025.07.17 |
| Rotation에서의 Yaw, Pitch, Roll (0) | 2025.07.14 |