Re: Histograms in gDirectory.
Pasha Murat (murat@cdfsga.fnal.gov)
Thu, 9 Jul 1998 13:24:22 -0500 (CDT)
Alexander Yuryevich Zvyagin writes:
 > Dear ROOTers,
 > 
 > I'd like to discuss one feature of the TH1 class: how the member function
 > void TH1::Build() works. (You'll find the function body at the end of this
 > E-mail.) This function is called when TH1 constructor is invoked.
 > 
 > // Example 1.
 > TH1F a("E",....), b("E",....);
 > 
 > This is *good* C++ code and this is *bad* ROOT code.
 > What will ROOT do?
 > The histogram a("E",...) is created and added
 > (See TObject::AppendDirectory()) to the current directory. On default it
 > is gDirectory. OK, you have histogram 'a'. Then ROOT will try to create
 > histogram b("E",...) with the *same* name "E" as the histogram 'a' has.
 > ROOT will find that object with the same name already exists in the
 > gDirectory and it'll try to *delete* it. 
	this is half-true: in this case  ROOT will delete `a' from the list 
	of existing histograms but not necessarily it will e trying to delete 
	the object itself.
 >
 >                                            So ROOT will delete pointer to
 > statically allocated object. Something like this:
 > {
 >   int a;
 >   int *b = &a;
 >   delete b;
 > }
 > This is bad thing. Your *good* C++ code will crash. I think this is
 > ROOT bug.
	Yes, this is a bad thing to do so as far as I understand (please 
	correct me if I'm wrong here) ROOT doesn't do it: 
	TObjects in ROOT containers "know" if they were allocated statically 
	or on the heap. Any TSequence(TList, TObjArray etc)::Delete method 
	deletes only those allocated on the heap.
						Regards, pasha.