I think the preferred way of deleting a model is by sending an entity_delete request. I believe this avoids various race conditions and makes sure every subcomponent of Gazebo is notified of the deletion. Here's another explanation.
msgs::Request *msg = msgs::CreateRequest("entity_delete", modelName);