https://docs.unrealengine.com/5.3/ko/unreal-object-handling-in-unreal-engine/
AActor, UActorComponent를 참조하는 UPROPERTY 또는 Unreal Container Class(TArray, ...)는 참조하는 객체가 Delete될 경우 null로 변경
즉, 삭제된 객체를 참조하는지 여부를 쉽게 확인 가능
다만, UPROPERTY는 강한 참조로 객체를 참조하므로 이 경우 자연스럽게 GC가 처리되지 않음.
이를 방지하기 위해 TWeakObjectPtr을 사용해 약한 참조를 사용하는 것을 추천
UE의 GC는 RootSet에서 시작해서 UObject를 추적하여 참조되지 못한 UObject는 Orphan이라 판단하여 GC에 포함
그렇다면 Dummy Object를 RootSet에 추가한다음에 (RootSet추가는 ConstructObject() 또는 UObjectBaseUtility::AddToRoot를 통해 추가 가능) 재사용 가능한 Object를 Dummy Object에 추가하는 방식으로 ObjectPool을 구현할 수 있지 않을까?
https://docs.unrealengine.com/5.3/ko/structs-in-unreal-engine/
UStruct는 UObject가 아니므로 GC가 지원되지 않음
USTRUCT()
struct StructName
{
GENERATED_BODY()
};
단, UPROPERTY를 통해 Editor나 Reflection에 표시 가능
또한, UStruct에서 Unreal Smart Pointer나 UPROPERTY를 사용해 UObject의 강한 참조가 가능
https://docs.unrealengine.com/5.3/ko/ufunctions-in-unreal-engine/
Unreal의 Delegate에 함수를 등록하기 위해서는 UFUNCTION 선언 필요
https://docs.unrealengine.com/5.3/ko/smart-pointers-in-unreal-engine/
UObject와 함께 사용할 수 없음