Indeed the null pointer test before delete was only needed in very early
g++ compilers (before egcs). Now there is not a single compiler that
needs this check anymore. The standard explicitly allows passing 0
pointers to delete.
Cheers, Fons.
Alvise Dorigo wrote:
>
> Hi Jacek, the SafeDelete is a "legacy" from ROOT. When the ROOT
> project started the C++ STL was not mature (e.g. string didn't
> exist), and probably also the language was not mature (probably the
> ANSI C++ wasn't out yet) and that could mean that they observed SEGV
> when trying to delete a null pointer (I do not think the had fun to
> do an extra check in the code).
>
> We used SafeDelete (that checks for null-ness) just to be as
> compliant as possible with the ROOT environment (for example using
> Int_t, Double_t etc. instead of int, double... that also guarantee
> portability).
>
> Please feel free to modify the code (I hope Fabrizio agree with me),
> but also my experience suggests that every "micro-"change in the code
> should followed by a test of the code itself.
>
> thanks
>
> Alvise
>
> Jacek Becla wrote:
>
>> Hi Gregory
>>
>> Not really. C++ guarantees that operator delete checks its argument
>> for null-ness. If the argument is 0, the delete expression has no
>> effect. In other words, deleting a null pointer is a safe (yet
>> useless) operation. There is no need to check the pointer for
>> null-ness before passing it to delete.
>>
>> Jacek
>>
>>
>>
>>
>> Gregory J. Sharp wrote:
>>
>>> Folks,
>>>
>>> The following change might also be a suitable form of defensive
>>> programming:
>>>
>>> in XrdXr/XrdXrClientWorker.cc in the destructor, it would be
>>> comforting to change:
>>>
>>> delete xrootd; xrootd = 0; delete errInfo; errInfo = 0; to if
>>> (xrootd) { delete xrootd; xrootd = 0; } if (errInfo) { delete
>>> errInfo; errInfo = 0; }
>>>
>>> and, totally free of charge, the trailing ; on the following line
>>> can go away.
>>>
>>> -- Gregory J. Sharp email:
>>> [log in to unmask] Wilson Synchrotron Laboratory
>>> url: http://www.lepp.cornell.edu/~gregor Dryden Rd
>>> ph: +1 607 255 4882 Ithaca, NY 14853 fax: +1
>>> 607 255 8062
>>>
>
--
Org: CERN, European Laboratory for Particle Physics.
Mail: 1211 Geneve 23, Switzerland
E-Mail: [log in to unmask] Phone: +41 22 7679248
WWW: http://www.rademakers.org/fons/ Fax: +41 22 7679480
|