c++ language-lawyer delete-operator nullptr

c++ ¿se requiere para manejar nullptr en los operadores de eliminación definidos por el usuario y específicos de la clase?



language-lawyer delete-operator (2)

De [expr.delete],

Si el valor del operando de la expresión de eliminación es un valor de puntero nulo, no se especifica si se llamará a una función de desasignación como se describió anteriormente.

Por lo tanto, parece que los operadores de eliminación definidos por el usuario o específicos de la clase manejen un nullptr .

En otra parte de [class.free], cuando se describen funciones de desasignación para clases, las clases con destructores virtuales pueden tener la función de desasignación llamada basada en el tipo dinámico. En ese caso, la función de desasignación no tendría que buscar nullptr.

¿Es necesario que los operadores de eliminación definidos por el usuario y específicos de la clase ignoren nullptr como hacen los operadores de la biblioteca estándar?

discussion paralela en los grupos de google.


Desde [basic.stc.dynamic]:

Cualquier función de asignación y / o desasignación definida en un programa de C ++, incluidas las versiones predeterminadas en la biblioteca, se ajustará a la semántica especificada en 3.7.4.1 y 3.7.4.2.

Desde [basic.stc.dynamic.deallocation]:

El valor del primer argumento proporcionado a una función de desasignación puede ser un valor de puntero nulo ; si es así, y si la función de desasignación se proporciona en la biblioteca estándar, la llamada no tiene efecto.

Si el argumento dado a una función de desasignación en la biblioteca estándar es un puntero que no es el valor de puntero nulo (4.11), la función de desasignación debe desasignar el almacenamiento al que hace referencia el puntero, finalizando la duración de la región de almacenamiento.

Se requiere que la función de desasignación no tenga efecto si se proporciona un valor de puntero nulo. Básicamente, es lo mismo que exigir que la función de desasignación ignore los valores del pionter nulo.