이득우 교수님의 <이득우의 언리얼 C++ 게임 개발의 정석> 책을 보며 공부하다가 아래와 같은 코드를 작성했다.
섹션(혹은 던전)에서 AI를 하나 생성하고 OnDestroyed 델리게이트에 던전을 COMPLETE 상태로 전환하는 함수를 등록했다.
그런데 의문점이 하나 생겼다.
공식 문서를 보면 OnDestroyed 델리게이트는 액터가 명시적으로 소멸됐을 때 발동한다고 한다.
Implicitly(암시적)이었으면 아.. GC가 실행되기 전이라서 가능한 거구나..할텐데, 명시적으로 액터가 소멸되었는데 그 안에 있는 델리게이트를 발동하고 심지어 소멸된 액터를 함수에서 사용하다니..
아래 함수에서 IsValid(DestroyedActor)로 체크해봐도 유효하다고 출력된다.
추측으로는 OnDestroyed 델리게이트를 실행하기 위해 액터의 참조를 어딘가에 보관하고 있어 GC가 실행되지 않았고, 델리게이트가 실행된 이후에 액터를 가리키는 참조가 모두 사라져 GC가 실행돼 소멸하는 것이 아닌가싶다.
검색해봐도 안 나오니 이것도 다음에 고수를 만나면 꼭 물어봐야겠다.
'Unreal Engine > 고찰' 카테고리의 다른 글
생명 주기 함수들의 호출 순서 (0) | 2023.04.01 |
---|---|
UObject* WorldContextObject (0) | 2023.03.19 |
애니메이션 몽타주의 관리 방식 (0) | 2023.03.07 |
골 때리는 MakeFromX() (0) | 2023.03.05 |
[작성중] 인터페이스 함수는 캐스팅 없이 사용할 수 있다. (0) | 2023.02.16 |