Storing reference of delegate in pointer

mrm_dev
Thu, 30 Oct 2025 17:33:11 +0000
C++

I have multiple different classes which need to perform the same complex operation

So to keep my code dry, I’m using a manager object which requires a delegate for the complex operation

Here’s a simplified example:

DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnChange);

UCLASS()
class MYPROJECT_API UMyManager : public UObject {
    GENERATED_BODY()

   public:
    UFUNCTION()
    void Setup(UObject* NewOwner, FOnChange& NewOnChange) {
        Owner = NewOwner;
        OnChange = &NewOnChange;
    }

    UFUNCTION()
    void DoComplex(){
        if(Owner == nullptr || OnChange == nullptr){
            return;
        }

        ...
     }


   private:
    FOnChange* OnChange;
    UObject* Owner;
};

UCLASS()
class MYPROJECT_API AMyActor : public AActor {
    GENERATED_BODY()

   public:
    UPROPERTY(BlueprintAssignable)
    FOnChange OnChangeA;

    UPROPERTY()
    UMyManager* Manager;

    virtual void BeginPlay() {
        Super::BeginPlay();
        Manager->Setup(this, OnChangeA);
    }
};

UCLASS()
class MYPROJECT_API AMyCharacter : public ACharacter {
    GENERATED_BODY()

   public:
    UPROPERTY(BlueprintAssignable)
    FOnChange OnChangeB;

    UPROPERTY()
    UMyManager* Manager;

    virtual void BeginPlay() {
        Super::BeginPlay();
        Manager->Setup(this, OnChangeB);
    }
};

Will this cause any unexpected behaviour or problems? Or should I take a completely different approach which will allow me to use delegates in a similar way

Note:
Please do not suggest using Blueprint Function Library, The manager also handles other functionality and has references elsewhere. I’ve only simplified it in the example

6 posts - 4 participants