[New Wiki] Memory Management, Count References to Any Object, and Know Who is Referring!

The link above seems to be about counting the objects that my object references. I needed a way to count all the objects that reference my object instead. This seems to be the first result on Google for that sort of question, so here’s what worked for me in UE 5.3:

TArray<UObject*> GetReferencesToLiveObject(UObject* Obj)
{
    if(!Obj || !Obj->IsValidLowLevelFast())
        return {};

    FReferencerInformationList List;
    IsReferenced(Obj, RF_AllFlags, EInternalObjectFlags::AllFlags, true, &List);
    
    TArray<UObject*> Referencers;
    for (const auto& Reference : List.ExternalReferences)
        Referencers.Add(Reference.Referencer);

    return Referencers;
}

I personally chose to use AllFlags for those parameters because I didn’t want to miss anything, but potentially some of the results could be CDOs, or partway through destruction, or otherwise unhelpful. There might be nicer values that would exclude those.

Also, that Reference variable there has some other nice information in it that I didn’t need but might be useful to you:

  • The number of times the Reference.Referencer object actually references Obj
  • The properties of the Reference.Referencer object that are actually doing the referencing, stored in Reference.ReferencingProperties.
5 Likes