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