Re: The history of delete on null pointers
Bob wrote:
Jorgen Grahn wrote:
Out of curiosity and frustration: was there ever a point in time when
it wasn't safe to pass a null pointer to delete?
I constantly find, in other people's code, things on the form
void foo(Bar * bar)
{
// ...
if(bar) delete(bar);
}
and I wonder what's behind it. History or psychology? Last time I
needed to do something similar myself was with AmigaDOS's FreeMem()
system call, some fifteen years ago ...
In the dark ages (at least 10 or 15 years ago) I encountered a couple of
early C and C++ compilers with which abnormal terminations would result
from calling free() or invoking operator delete with a NULL pointer.
As far as I know, delete with a NULL pointer has always been safe in
C++ (even in the ARM and earlier). That didn't necessarily mean that
compilers all complied with the requirement from day one.
In standard C, free() has always been safe with a NULL argument but,
again, compliance to standards was patchy in the early days of the
standard.
The example code for free() in K&R version 1 will not work if
passed a null pointer. I think (but I am far from sure) that
the version of free() delivered in the libc of the early USL
Unixes accepted a null pointer, but this certainly wasn't a
documented feature (at least not in the documentation I have
available, from 1979), and probably wasn't true for many other
implementations.
The C standard didn't appear until the end of the 1980's. Both
C and C++ existed before then (although I don't think C++ was
that widely used before then). On the other hand, the oldest
specification of C I have handy (1986) does say that "deleting a
pointer with the value 0 is harmless."
I know that in the pre-standard days, in C, I always checked for
null before calling free; it wasn't necessary with the library I
regularly used back then (which derived from the Berkley
distribution of Unix), but as it wasn't guaranteed by the
specifications I had, I wasn't taking any risks.
In C++, I can't remember ever even hearing of an implementation
which wouldn't accept null for delete, but of course, when I
first made the transition to C++, the habit was there, and I
continued checking for about a year or more, before I finally
stopped.
--
James Kanze Gabi Software email: kanze.james@neuf.fr
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France, +33 (0)1 30 23 00 34
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]