I wonder how you can reach up a situation where you are deleting a pointer only if it is null. But staying in language lawyering mode...
In C++ 03
5.3.5/1
the operand of delete shall have a pointer type or a class type having a single conversion to a pointer type.
void* is a pointer type so a null void pointer meets the static requirement.
5.3.5/2
In either alternative [delete
and delete[]
], if the value of the operand of delete is the null pointer the operation has no effect.
And this gives the wanted behavior.
5.3.5/3
In the first alternative (delete object), if the static type of the operand is different from its dynamic type, the static type shall be a base class of the operand's dynamic type and the static type shall have a virtual destructor or the behavior is undefined.
This is not relevant, a null pointer doesn't reference an object on which to check the additional constraint.
In C++ 0X
5.3.5/1
The operand shall have a pointer to object type, or a class type having a single non-explicit conversion function (12.3.2) to a pointer to object type.
void* isn't a pointer to object type, so should be rejected.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…