+ 이 글은 작성자가 직접 공부하고 복습하며 작성한 글입니다. 만약 직접 작성하지 않았다면, 꼭 출처를 밝히겠습니다!

 + 이 글은 개인적인 공부를 바탕으로 작성되었기에, 틀린 부분이 있을 수 있으며, 틀린 부분이 있다면 알려주시면 감사하겠습니다!

 + 이 글을 다른 곳으로 가져가신다면, 꼭 출처를 남겨주세요~

 + '참고사이트'는 공부하기 위해 참고한 사이트들을 모아 둔 것입니다.

 + 혹시라도 문제가 된다면 바로 조취를 취할테니, 말해주시면 감사하겠습니다!



기본적인 TSoftClassPtr과 TSubclassOf에 대한 기록


Unreal DataTable에서 BP를 기록하는 과정에서 의문이 들어 조사하게 되었다.


TSoftClassPtr<T>

  • 말 그대로 Class Soft Pointer라는 뜻으로, 해당 값이 가리키는 데이터는 직접 지정한 template형의 데이터일 것.

  • 그리고 그 데이터는 UClass, UE4 엔진이 실행될 때, 처음 생성되어 보관되어지는 Unreal Class Meta Data일 것이다.

  • 만약, 한 번도 생성되지 못한 것이라면, LoadSynchronous()를 통해 해당 CDO(Class Default Object)를 생성해줄 수 있다.

  • Get() Load UClass를 반환한다. CDO를 반환하는 것일 듯.

  • 해당 데이터형을 사용하려면, Get()이나 LoadSynchronous()를 잘 활용해야할 것이다.

 

TSubclassOf<T>

  • 이 데이터형은 Type안정성을 위해서 사용하는 경우가 많다.
    , 값으로 들어오는 클래스 정보는 T를 상속한 Class다 라는 의미를 명확히 할 때, 사용하는 데이터 형이다.

  • 이것도 기본적으로는 내부에 UClass* 데이터를 가지고 있다.

  • 이 클래스의 Get() **this를 반환하는데... 기본적인 operator*연산이 Class포인터를 넘기는 작업이니까,
    **this
    UClass 원본 데이터를 반환하는게 아닐까 싶다.

  • 호환되는 TSubclassOf 유형을 서로에게 할당하는 연산은 RunTime Check하고,
    서로 호환되지 않는 TSubclassOf 유형(공통 부모조차 없는 전혀다른 클래스) CompileTime Check한다.
    왜냐하면, 호환되는 유형은 null 값등이 사용될 수 있지만, 서로 호환되지 않는 유형은 Crash를 유발할 수 있기 때문!

 

T name;

  • 그냥 template형으로, 사용하게되면 CDO와는 다른 인스턴스가 생성되어 메모리에 잡힐 것으로 예상됨.




Copyright © -강정이좋아- 무단 전재 및 재배포는 하지 말아주세요.

+ Recent posts