Страницы

Поиск по вопросам

среда, 27 ноября 2019 г.

Удаление нулевого указателя


Что происходит при попытке удаления нулевого указателя через delete?
    


Ответы

Ответ 1



Ровным счётом ничего. Формальная ссылка на стандарт, §5.3.5/2: In the first alternative (delete object), the value of the operand of delete may be a null pointer value, a pointer to a non-array object created by a previous new-expression, or a pointer to a subobject (1.8) representing a base class of such an object (Clause 10). [...] In the second alternative (delete array), the value of the operand of delete may be a null pointer value or a pointer value that resulted from a previous array new-expression. Перевод: Для первого варианта (delete object), значение операнда delete может быть значением null-указателя, указателем на объект, не являющийся массивом, созданный при помощи new, или указателем на подобъект (1.8), представляющий базовый класс такого объекта (см. клаузу 10). [...] Во втором случае (delete array), значение операнда может быть значением null-указателя или значением указателя, полученного при помощи выражения new для массивов. Из официального C++ FAQ: Нужно ли мне проверять на null перед delete p? Нет! Язык C++ гарантирует, что delete p ничего не будет делать, если p есть null.

Комментариев нет:

Отправить комментарий