Dynamic Multicast Delegate becomes unbound after indeterminate amount of time

I fix this problem by modifing a little bit of code. I see that if I bind a common member function of a common class to a delegate by CreateSP(pCommonClassObject, &FCommonClass::FnName), then all is right.



class FReceiverWrapper : public TSharedFromThis<FReceiverWrapper>
{
 public:
 FReceiverWrapper(UXXXComponent* pComp) : HolderObject(pComp) {}

    void OnFrame(BvhDataHeader* Header, float* Data )
    {
        UXXXComponent* Comp = HolderObject.Get( );
        if (Comp)
            {
                Comp->OnFrameCallback( Header, Data );
            }
    }

 private:
    TWeakObjectPtr<UXXXComponent> HolderObject;
};

class UXXXComponent : public UActorComponent
{
    // ...

 public:
    void OnFrameCallback(BvhDataHeader* Header, float* Data)
    {
        // parse the data here
    }

    BeginPlay()
        {
            RecvWrapper = MakeShared<FReceiverWrapper>(this);
            DelegateObj.Add(
                            XXXDelegate::CreateSP(
                                                  RecvWrapper.Get(),
                                                  &FReceiverWrapper::OnFrame));
        }

 private:
    TSharedPtr<FReceiverWrapper> RecvWrapper;
    XXXDelegate DelegateObj;
}