Я знаю, что delete
использование нулевого указателя является недопустимым:
В любой из альтернатив, если значение операнда удаления является нулевым указателем, операция не имеет никакого эффекта.
(C ++ Standard 5.3.5 [expr.delete] p2
)
А также, что удаление указателя void*
является неопределенным поведением, поскольку деструктор не может быть вызван, так как нет объектовтипа void
:
В первом альтернативном варианте (delete object
) значение операнда удаления должно быть указателем на объект, не являющийся массивом, или указателем наподобъект, представляющий базовый класс такого объекта. Если нет, поведение не определено.
(C ++ Standard 5.3.5 [expr.delete] p2
)
Теперь,обычно я понимаю, что вещи, перечисленные вначале, имеют приоритет над вещами, которые перечислены позже, но как насчет нулевого указателя void*
как следующего?
void* p = 0;
delete p; // UB or well-defined?