¿Sigue siendo seguro eliminar nullptr en c ++ 0x?

Inc++03 está bastante claro que eliminar un puntero nulo no tiene ningún efecto. De hecho, se indica explícitamente en§5.3.5/2 ese

En cualquiera de las alternativas, si el valor del operando de delete es el puntero nulo, la operación no tiene efecto.

Sin embargo, en el @ actusequí parac++0x esta frase parece faltar. En el resto del borrador solo pude encontrar oraciones que indiquen qué sucede si el operando de la delete-expression no es la constante de puntero nulo. ¿Se está eliminando el puntero nulo todavía definido enc++0x, y si es así, ¿dónde?

Notas:

Existe evidencia circunstancial significativa que sugiere que todavía está bien definido.

n primer lugar, están las dos oraciones en§5.3.5/2 declarando qu

En la primera alternativa (eliminar objeto), el valor del operando de eliminar puede ser un valor de puntero nulo, ...

En la segunda alternativa (matriz de eliminación), el valor del operando de eliminación puede ser un valor de puntero nulo o ...

Estos dicen que se permite que el operando sea nulo, pero por sí solos no definen realmente qué sucede si lo es.

Segundo, cambiando el significado dedelete 0 es un cambio importante, y el comité de estándares sería muy poco probable que haga este cambio en particular. Además, no se menciona que esto sea un cambio importante en el Anexo de compatibilidad (Anexo C) de lac++0x sequía. Sin embargo, el Anexo C es una sección informativa, por lo que esto no tiene relación con la interpretación de la norma.

Por otro lado, el hecho de que eliminar el puntero nulo no tenga efecto implica una verificación adicional del tiempo de ejecución. En muchos códigos, el operando nunca puede ser nulo, por lo que esta verificación de tiempo de ejecución está en conflicto con el principio de sobrecarga cero. Tal vez el comité simplemente decidió cambiar el comportamiento para alinear c ++ estándar con los objetivos de diseño establecidos del lenguaje.

Respuestas a la pregunta(2)

Su respuesta a la pregunta