Engine crashes when using NewObject<>()

NewObject is for UObject derived classes. It looks like uoure trying to spawn an actor so you would use…

GetWorld()->SpawnActor<AWeapon>(AWeapon::StaticClass());

Edit: An option then might be to make a UWeapon class that has a SpawnWeapon function you can call. That way you make a UWeapon, add it to your inventory,and when the player switches to it you can call

Inventory[index]->Spawn(parameters);