Both solutions work. Which one is more efficient probably depends on how many weapon types there are and how likely the player is to switch between them.
How do you handle the inventory display? Personally, I usually store all inventory objects as, well, objects with the player, simply because I needed their icon and description for the inventory display anyway. Never had any problem with that, though now that I think of it the characters always had a very limited inventory.
I’m busy reworking my inventory, but basically, Ive been storing a WeaponID enum with an Ammo integer, then on selection spawn a Weapon Actor using the stored data.
For my display I have an Inventory Data actor for each WeaponID, that contains UI data (such as image and description) for that weapon type.
That way I dont need all my weapon actors to contain UI data.
Now with 4.9 I can just get class defaults of that InventoryData actor by running a select on WeaponID, and not actually having to spawn an actor…
Like I said, Im busy reworking it, so I can maybe clean things up a little more.
Thats why I was wondering if destroying the weapon actor on selection and spawning a new one is bad practice because of the way unreal handles garbage collection or something like that…