В c++03
ней довольно ясно , что удаление пустого указателя не имеет никакого эффекта. В самом деле, это прямо указано в §5.3.5/2
том, что:
В любом случае, если значением операнда удаления является нулевой указатель, операция не имеет никакого эффекта.
Тем не менее, в текущем проекте для c++0x
этого предложения , кажется, отсутствует. В остальной части черновика я смог найти только предложения, в которых говорится, что произойдет, если операнд выражения удаления не является константой нулевого указателя. Удаление нулевого указателя все еще определено в c++0x
, и если да, то где?
Ноты:
Существуют значительные косвенные доказательства, позволяющие предположить, что это понятие все еще хорошо определено.
Во-первых, есть два предложения, в которых §5.3.5/2
говорится, что
В первой альтернативе (объект удаления) значение операнда удаления может быть значением нулевого указателя, ...
и
Во втором варианте (массив удаления) значение операнда удаления может быть значением нулевого указателя или ...
Они говорят, что операнду разрешено быть null, но сами по себе не определяют, что произойдет, если это так.
Во-вторых, изменение значения delete 0
- это серьезное изменение, и комитет по стандартам вряд ли внесет это конкретное изменение. Кроме того, нет упоминания о том, что это критическое изменение в Приложении по совместимости (Приложение C) c++0x
проекта. Приложение C, однако, является информативным разделом, поэтому оно не имеет отношения к интерпретации стандарта.
С другой стороны, тот факт, что удаление нулевого указателя не должно иметь никакого эффекта, подразумевает дополнительную проверку во время выполнения. В большом количестве кода операнд никогда не может быть нулевым, поэтому эта проверка во время выполнения противоречит принципу нулевых накладных расходов. Возможно, комитет просто решил изменить поведение, чтобы привести стандартный c ++ в большее соответствие с заявленными целями проектирования языка.