Это - идеальное использование Регулярных выражений. Выезд этот полезный веб-сайт , класс .Net Regular Expressions и эта очень полезная книга , Осваивающая Регулярные выражения .
Что можно и чего нельзя делать в C ++:
«Эффективный C ++» и «Более эффективный C ++» Скотта Мейерса.
Для указателей (и ссылок):
не используйте исходные указатели, если они вам не нужны. В большинстве случаев умный указатель (см. Boost ) является лучшим вариантом.
Мои практические правила:
NULL
(примените # 1 и # 3, чтобы решить, передавать ли через const T *
или за T *
) Потоки всегда должны передаваться как неконстантные ссылки.
Из c ++ faq :
Используйте ссылки, когда можете, и указатели, когда вам нужно.
1) Я обычно использую переменные-члены, ограниченные классом. Они создаются в инициализаторе класса, и мне не нужно беспокоиться об указателях.
2) Вы можете передать функцию по ссылке и не беспокоиться о передаче указателей. Это эффективно передаст указатель на метод / функцию, которую можно использовать, как если бы вы передали класс, но без накладных расходов на копирование самого класса.
3) Если мне нужно контролировать время жизни объекта, который не зависит от классов моей основной архитектуры приложения ... тогда я буду использовать auto_ptr из STL, чтобы автоматически обрабатывать уничтожение указателя, когда на него больше не ссылаются. Проверьте это - это правильный путь.
Используйте его всякий раз, когда вы имеете дело с выделенной памятью или передачей аргументов по ссылке на метод; Я не думаю, что существует правило не использовать указатели.
Обычно, когда вы можете использовать ссылки вместо указателей, это хорошая идея. Ссылка должна иметь цель (без нарушений NULL-указателя), они допускают ту же семантику, что и указатели, при передаче в качестве аргументов функции, и их, как правило, удобнее использовать для новичков (или тех, кто не работает с C).
Указатели требуются, когда вы хотите выполнять динамическое выделение памяти; когда вам нужно разобраться с неизвестным количеством вещей, которые будут уточнены позже. В этом случае интерфейс для доступа к памяти осуществляется через new
и delete
, которые работают с указателями.
Моя философия - всегда передавать по значению, если вам не нужно изменять переданную переменную или копирование объекта дорого. В обоих этих случаях сначала рассмотрите возможность использования ссылки вместо указателя: если вам не нужно изменять объект, на который вы ссылаетесь, и вам не нужно возможное экстремальное значение (указатель NULL), вы можете использовать ссылку.
Не забывайте и об итераторах.
Все хорошие ответы выше. Кроме того, если вы выполняете некоторую работу с интенсивным использованием процессора, важно понимать, что разыменование указателя, вероятно, приведет к пропуску кеша на вашем процессоре. Хорошая идея - сохранить доступ к вашим данным с минимальным разыменованием указателей.
Таким образом предотвращаются утечки памяти и контролируется согласованность атрибутов.
Salu2 .