Возможный дубликат:
Есть ли причина проверять указатель NULL перед удалением?
Я часто вижу в коде следующее:
if(pointer)
delete pointer;
Насколько я понимаю, удалить нулевой указатель безопасно, так в чем смысл этой проверки?
Возможный дубликат:
Есть ли причина проверять указатель NULL перед удалением?
Я часто вижу в коде следующее:
if(pointer)
delete pointer;
Насколько я понимаю, удалить нулевой указатель безопасно, так в чем смысл этой проверки?
delete
проверит, является ли указатель NULL для вас, поэтому вы правы, что проверка не нужна.
Вы также можете заметить, что некоторые люди устанавливают указатель в NULL после его удаления, чтобы вы не делали ничего глупого, например, пытались использовать память, которая больше не принадлежит вам, или чтобы вы не удалили указатель дважды, что вызовет ошибку.
Сейчас это безопасно, но так было не всегда :-) так что, скорее всего, это привычно. Также есть другие последствия для удаления. 1) если вы используете специализированный диспетчер памяти и переопределяете новые и удаляющие операторы, вам вполне может потребоваться выполнить проверку Оператор Удалить для более подробной информации.
[citation needed]
. Это довольно легко добавить, и IIRC C гарантирует, что free
правильно обрабатывает NULL
с самого начала (по крайней мере, C89, я не удивлюсь, если это будет и в ANSI C). Поэтому мне трудно поверить, что когда-либо существовала пригодная для использования реализация C++, которая не могла обрабатывать delete NULL;
.
- person ; 04.11.2011
Чек не нужен.
В документации указано, что удаление "освобождает блок памяти, на который указывает ptr (если не нуль)"
Большинство людей делают это, потому что в противном случае у них обычно есть обработка ошибок (кроме того, что я действительно не вижу смысла выполнять проверку). В некоторых случаях они делают это, чтобы убедиться, что они что-то освобождают, а не случайно где-то меняют указатель и вызывают утечку памяти, не освобождая ее. free(NULL);
должен работать во всех случаях и не выдавать ошибок, поэтому, если не задействована обработка ошибок, вы можете удалить оператор if и просто сделать бесплатно.
kfree
иvfree
в ядре Linux? - person Shahbaz   schedule 04.11.2011