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
>>
|