KoreanFoodie's Study

[언리얼] TSharedRef 를 클래스 멤버 변수로 선언할 때 에러 본문

Game Dev/Unreal C++ : Dev Log

[언리얼] TSharedRef 를 클래스 멤버 변수로 선언할 때 에러

GoldGiver 2023. 3. 23. 20:21

TSharedRef 를 클래스 멤버 변수로 선언할 때 에러

핵심 :

1. TSharedRef 를 선언할 때는 반드시 초기화를 해 주자.
2. TSharedRef 를 초기화할 때는 MakeShareable 보다 MakeShared 를 사용하자.
3. 초기화가 힘들면 TSharedPtr 로 선언하는 것도 대안이다.

TSharedRef 를 멤버 변수로 선언할 때, 만약 헤더파일이나 생성자에서 초기화를 해 주지 않는다면 아래와 같은 에러를 만나게 된다...

void EnsureRetrievingVTablePtrDuringCtor(const TCHAR* CtorSignature)
{
	UE_CLOG(!GIsRetrievingVTablePtr, LogCore, Fatal, TEXT("The %s constructor is for internal usage only for hot-reload purposes. Please do NOT use it."), CtorSignature);
}



따라서 다음처럼, TSharedRef 는 생성자에서 초기화를 꼭 해주자.

UMyClass::UMyClass() : UMyClassBase(), _mySharedRef(MakeShared<SomeType>())
{
}

참고로, TSharedRef 는 다른 스마트 포인터와 달리 사용할 때마다 Pin() 등을 호출해 Nullptr 체크를 해 줄 필요가 없어 효율적이다.

 

참고 : 언리얼 공식 문서
Comments