On 11/8/2011 7:05 PM, Timon Gehr wrote:
On 11/08/2011 11:35 PM, Alex Rønne Petersen wrote:
Hi,
As the title suggests, I'm going to be rather blunt about this.
assert(obj) testing the invariant *without* doing a null check is insane
for the following reasons:
1) It is not what a user expects. It is *unintuitive*.
2) assert(!obj) does an is-null check. assert(obj) is a completely
broken opposite of this.
3) No AssertError is thrown, which is the entire point of the built-in
assert().
4) The few added instructions for the null check hardly matter in a
*debug* build of all things.
I don't mind assert(obj) testing the invariant of obj. In fact, that
very much makes sense. But please, please, *please* check the object for
null first.
+1.
+1. **AND** in debug mode all pointers should be checked for null.
Conceptually, I fail to see how a null pointer dereference is different
from an array bounds error. A null pointer is effectively an array with
length zero.