Не определено ли поведение при удалении указателя null void *?

Я знаю, что delete с нулевым указателем не работает:

В любом варианте, если значение операндом удаления является нулевой указатель, операция не имеет никакого эффекта.
(Стандарт C ++ 5.3.5 [expr.delete] p2 )

А также удаление void * указатель имеет неопределенное поведение, поскольку деструктор не может быть вызван, поскольку нет объектов типа void :

В первом варианте ( удалить объект ) значение операндом удаления должен быть указатель на объект, не являющийся массивом, или указатель на подобъект, представляющий базовый класс такого объекта. В противном случае поведение не определено.
(Стандарт C ++ 5.3.5 [expr.delete] p2 )

Обычно я считаю, что вещи, перечисленные первыми, имеют приоритет над тем, что указано в списке позже, но как насчет нулевого void * указателя, как показано ниже?

void* p = 0;
delete p; // UB or well-defined?
28
задан Xeo 30 May 2011 в 13:52
поделиться