Страницы

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

среда, 3 октября 2018 г.

Нулевой указатель

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


Ответ

Ровным счётом ничего.

Формальная ссылка на стандарт, §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

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

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