What is the best way to go about implementing in-game objectives / goals

I am currently working on a game where I would like to keep track of the current player’s game objectives, I am just not quite sure what the ideal approach would be.

Some of my thoughts:

I create a struct object (not sure where: gamemode, character class, or hud) which defines some properties such as: a Boolean of whether it has been completed, a string that describes the objective, and some sort of variable that determines the reward. Then I would create a new struct object whenever the player has a new objective and store it in some sort of public array accessible by either the HUDClass or UMG.

Or instead of a struct or I could create an empty class file file with its own constructor and add its own methods such as completing an objective, dropping the objective, etc.

Are these decent data structures to be using? Would I benefit from creating a new class instead of a struct for objectives. Where would be an appropriate place to handle events for the objectives, such when the player is assigned a new goal… the player character class? Any insight, ideas, or feedback would be greatly appreciated.