EDIT:
Hey
Sorry for the wall of text lol, so I finally managed to fix the issue by doing the following:
SpellBar = TArray of Objects (like your weapon array) [Fireball][FrostBolt][etc]
SpellBar_Internal = TArray of Tsubclassof [Fireball - Class][FrostBolt - Class][etc - Class]
Lets say I wanted to cast a fireball, so I went to that index and called the function like I previously was (ex: The fireball object managed my spell cooldown) but when it came time to spawn I simply spawned from the fireball class it self.
spellBar[index]->SpawnSpell(spellBar_Internal[index]);
And because the initial spell that I spawned to store in my SpellBar was off the map and never collided with anything, it never got deleted; and remained as a way to manage my cooldowns.
Much Appreciated,
-Ven