Поиск чего-то на SO, я наткнулся на этот вопрос и один из комментариев к самому проголосовавшему ответу (пятый комментарий к этому большинству голосов) предполагает, что delete p; p = NULL;
является антипаттерном. Должен признаться, что я иногда использую его часто, иногда его обманывая\большую часть времени с помощью чека if (NULL != p)
. Сам человек, кажется, предлагает его (см. пример функции destroy()
), поэтому я действительно смущен тем, почему это может быть такой страшную вещь, которую можно считать антипаттером. Я использую его по следующим причинам:
- когда я выпускаю ресурс, я также хочу, чтобы он сделал недействительным его для дальнейшего использования, а NULL - это правильный инструмент, чтобы сказать, что указатель недействителен.
- Я не хочу оставлять позади висячие указатели.
- Я хочу избежать двойных\множественных ошибок - удаление указателя NULL подобно nop, но удаление оборванного указателя похоже на "стрельбу в ногу"
Обратите внимание, что я не задаю вопрос в контексте указателя "this", и предположим, что мы не живем в идеальном мире С++ и этот старый код существует, и он должен поддерживаться, поэтому, пожалуйста, не предлагайте никаких умных указателей:).