Тут c++03
цілком зрозуміло, що видалення нульового вказівника ніяк не впливає. Справді, прямо зазначено, §5.3.5/2
що:
В будь-якому варіанті, якщо значення операнда delete є нульовим покажчиком, операція не впливає.
Тим НЕ менше, в поточному проекті для c++0x
цієї пропозиції , здається, відсутня. В решті чернетки я міг знайти лише речення, що вказують, що відбувається, якщо операнд виразу delete не є константою нульового покажчика. Видалення нульового покажчика все ще визначено в c++0x
, і якщо так, то де?
Примітки:
Існують суттєві побічні докази, які свідчать про те, що він все ще добре визначений.
По-перше, є два речення, в яких §5.3.5/2
зазначено, що
У першому варіанті (об'єкт видалення) значення операнда видалення може бути нульовим значенням покажчика, ...
і
У другому варіанті (масив видалення) значення операнда видалення може бути нульовим значенням покажчика або ...
Вони кажуть, що операнду дозволено мати нульовий характер, але самі по собі насправді не визначають, що трапиться, якщо це буде.
По-друге, зміна значення поняття « delete 0
серйозна зміна», і комітет зі стандартів навряд чи зробить цю конкретну зміну. Крім того, немає жодної згадки про те, що це надзвичайна зміна у Додатку про сумісність (Додаток С) c++0x
проекту. Однак Додаток С є інформаційним розділом, тому це не має ніякого тлумачення стандарту.
З іншого боку, той факт, що видалення нульового вказівника потрібно, щоб не мати ефекту, передбачає додаткову перевірку часу виконання. У багатьох кодах операнд ніколи не може бути нульовим, тому ця перевірка виконання суперечить принципу нульових накладних витрат. Можливо, комітет просто вирішив змінити поведінку, щоб привести стандартний c ++ більше у відповідність із заявленими цілями дизайну мови.