Re: [ROOT] TRefArray and Unique ID

From: Frankland John (frankland@ganil.fr)
Date: Thu Oct 30 2003 - 10:13:50 MET


Hi Sebastien

I tried your code and changed a few things :

//________________________________________
MyClassRef::~MyClassRef()
{
 fRefArray.Clear();---> you don't really want to delete the objects you 
reference, do you ?
}

void MyClassRef::Clear()
{
 fRefArray.Clear();---> just clear out the list of references, but the 
objects are deleted by the TClonesArray
}
//_________________________________________
void ReadTree()
{
.....
 TClonesArray* clones = 0;
 
 tree->SetBranchAddress("b_clones",&clones);

//connect the TRefArray branch as well - I have recently discovered that 
if a branch contains objects
//which reference other objects in unconnected branches, the TTree can 
create those objects all by
//itself (as well as recreating the TClonesArray without deleting the 
old one) and cause monumental
//memory leaks...
 MyClassRef* myclassref1 = 0;
 
 tree->SetBranchAddress("b_myclassref1",&myclassref1);
//_______________________________________________

but I still see the same result as you -
twice as many objects in the final myclassref2 and I don't know why. As 
for the
result being different when you read or write, if you mean the unique 
identifiers
are not the same, I don't think it's important as they are just internal 
counters
for ROOT (aren't they ???).

Sorry
John

> The final output has changed.
>
> Well, this is due to the fact that it is a new ROOT 
> session.
>
> But what I'd like to understand is why the objects
> in myclassref2's TRefArray have been doubled ? 
> 
> 
>


-- 

John D. Frankland <mailto:frankland@ganil.fr>
Beam Coordinator
GANIL
B.P. 55027
14076 CAEN Cedex 05

*tel:* +33 (0)231454628
*fax:* +33 (0)231454665



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:16 MET