void VerifyReferencerName()
{
if (!bCurrentObjectVerified && CurrentGCObject)
{
if (!ensureAlwaysMsgf(CurrentGCObject->GetReferencerName() != FGCObject::UnknownGCObjectName,
TEXT("Please make sure all FGCObject derived classes have a unique name by overriding FGCObject::GetReferencerName() function. FGCObject::GetReferencerName() will become pure virtual in the next engine release. See callstack for details.")))
{
bCurrentObjectVerified = true;
}
}
}
언리얼 4.27의 코드를 5.1 버전으로 옮겨오면서, FCGObject를 사용하는 코드에서 위의 ensure에 걸리는 이슈가 있다.
5.0 버전부터 추가된 FGCObject의 GetReferencerName() 함수를 오버라이드 해주지 않아 발생한 이슈다.
위의 서밋에서 해당 룰이 추가되었고, 간단하게 FGCObject를 상속 받는 클래스에 GetReferencerName 함수를 오버라이드해주면 해결된다.
코드를 보면 다음 버전에서 순수 가상함수가 되면서, 이를 오버라이드 하지 않으면 컴파일 자체가 안된다고 되어 있지만, 5.2 버전에도 아직 순수 가상함수가 아니다.
왜 이런 규칙을 추가했는지는 아마 GC로 인한 히칭 이슈가 있을 경우, 이를 프로파일링할 수 있도록 만들기 위함으로 보인다.