Я знаю, что 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?