Лучший способ - не помещать указатели в вектор, если вам это абсолютно не нужно.
Но если вам действительно нужно иметь вектор указателей, то то, как вы это делаете, прекрасно (но .clear()
вектор после слов, если он не будет немедленно уничтожен, так что он не полон висячие указатели)
Заявление
delete *it;
не влияет на итератор. Он не изменяет итератор, не делает его недействительным и не удаляет указатель, на который ссылается итератор, из коллекции. Все, что он делает, это освобождает память, на которую указывает указатель, на который указывает итератор. Сам указатель должен быть удален из коллекции отдельно.