Hi all,
I didn't get this message to roottalk, so here goes.
Hi Alberto,
On Tue, 20 Nov 2001 16:11:19 +0100
Alberto Pulvirenti <alberto.pulvirenti@CT.INFN.IT> wrote
concerning "Re: [ROOT] Little hint about pointers":
> Ok, Chhristian, I saw you're right.
> But now rises another question:
>
> if I leave the C2 destructor void, and I invoke the TObjArray::Delete(),
> what will happen to the object pointed by the C2 ? It seems that the
> TObjArray::Delete doesn't remove it...
Well, as the attached (expanded) example show, it does call the DTOR
of class C1. For what ever reason, the underlying TObject array is
still there :-(. This seems extreemly odd. The program should
SIGSEGV.
I tried this on Red Hat 6.2 (GCC 2.91) and Red Hat 7.1 ('GCC 2.96')
using ROOT 3.02/00. I also tried on Red Hat 6.2 and ROOT 3.02/04 with
the same result.
However, on Debian GNU/Linux 2.1 (GCC 2.91) with ROOT 2.23/10, the
program does get a SIGSEGV, as I believe it should.
Maybe I've misunderstood something in the ANSI/ISO C++ standard, that
makes this behaviour alright, but I dont think so. I believe this is a
question for the ROOT team.
It seems that one gets a handle to the newly allocated TObjects
resulting from TObjArray::Init in TObjArray::Delete. That's my guess
anyway.
This issues, I believe goes for all subclasses of TCollection,
including THashList.
Yours,
Christian Holm Christensen -------------------------------------------
Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91
DK-2200 Copenhagen N Cell: (+45) 28 82 16 23
Denmark Office: (+45) 353 25 305
Email: cholm@nbi.dk Web: www.nbi.dk/~cholm
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:09 MET