I have a server function that spawns a weapon with weapon parts. The weapon part blueprints are in specific folders so I load all of the parts into their own arrays respectively and when i call this function to spawn a weapon i pass in a blank weapon to attach parts to then i spawn the weapon parts from the array of parts and when I call the function a second time or anytime after the first the previously spawned parts become deleted actors and only the new ones show up. What is making them deleted actors?
It’s a safety measure. When you destroy actor, actor is only maked to be deleted, they in so called PendingKill state (UObjectBaseUtility::IsPendingKill | Unreal Engine Documentation) as actor is referenced and needed by other system that need to resolve everything up to let it go, if you would imidietly destroy actor, those systems would been left with null or invalid pointers and cause potential unexpected crashes. Most engine systems are PendingKill aware and consider actor already dead, so they are not processed anymore. Deleted actor should fade away, but if they stay permanently that means somewhere in code actor is being referenced and hold up and this can be considered memory leak. Note that this also includes your code (by using C++ you technically extending the engine) clearing references manually to actors in your UPROPERTY variables and array should definitely help out the process so you may try that, as issue may be in there.
As you may notice in API reference this is not just actor feature it is UObject overall life cycle feature.