Re: History of - if(p) delete p; - ... ?
Martin T. wrote:
Hi all.
As things are the following works just fine under Visual Studio:
int* p=NULL;
free(p); // If memblock is NULL, the pointer is ignored and free
immediately returns.
delete p; // The default behavior for a null value of _Ptr is to do
nothing. delete[] p; // The default behavior for a null value of
_Ptr is to do nothing.
p = NULL;
However, our code base uses the following construct basically all
the time: int* p = ...
if(p)
free(p); // or delete, or delete[]
p = NULL;
I think the code was initially created on Visual Studio 4 and then
got ported over the years to 5/6/now 2005 ...
I'm trying to figure out why we always used this construct even
though it's not necessary.
Was it *ever* necessary? Pre VC6, pre VC5, ... ?? Has the free
function in C always been specified as noop in case of NULL ?
For pre-standard C it was actually needed on some compilers. Since
around 1989 it shouldn't be. :-)
On the other hand, it doesn't hurt much. If you check the code
generated by recent MSVCs, you will see that
if (p)
delete p;
and
delete p;
generates identical machine code. If you don't check for a null
pointer, the compiler will have to. If you check, the compiler will
not!
Bo Persson