Question:
To initialize a pointer after deleting it, should I assign a NULL to it or zero? Are they the same in C++? I know strictly speaking, I should assign NULLs to deleted pointers. But the app I work with uses zeros instead. I wonder if I need to change them.
Answer:
C and C++ define NULL differently. A typical definition of NULL in C++ looks like this:
#define NULL 0
Whereas in C, NULL is usually defined like this:
#define NULL ((void*)0)
Why is this? Pointers in C++ are strongly-typed, unlike pointers in C. Thus, void* cannot be implicitly converted to any other pointer type without a cast operation. If C++ retained C’s convention, a C++ statement such as:
char * p = NULL;
would be expanded into:
/*error: incompatible pointer types*/ char * p = (void*) 0;
For this reason, the C++ standard requires that NULL be defined either as 0 or as 0L. In other words, NULL is just an alias for the literal zero. Therefore, you may use zero as a pointer initializer directly. There’s no need to replace 0 with NULL.