Что происходит при попытке удаления нулевого указателя через 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.
Комментариев нет:
Отправить комментарий