Re: [ROOT] Problem with TObjectTable::Delete()

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Jan 30 2002 - 10:25:48 MET


Hi Mark,

In the constructor of class A, you should add the following statement;
  B.SetDirectory(0);
By definition, A owns B. However the TH1F constructor (by default) will
add the created histogram to the list of objects in the current directory/file.
When the file is closed, this object is deleted. You will get the object
deleted twice.

You can also turn off the feature adding automatically the histogram objects
to the current directory (gDirectory->GetList()) by calling the static function
  TH1::AddDirectory(kFALSE);
Note that if you do that, doing something like file->Write() will not
save your histograms to the file.

Rene Brun


Mark Boulay wrote:
> 
> Hello,
> 
>         I have a class (call it class A), derived from TObject which has as a
> data member a TH1F
>         (call it TH1F B).
>         When an object of class A is read in from file, and then the file
> closed,
>         a call is made to TObjectTable::Delete() deleting all objects which
> were
>         contained in the file.
>         The object A is first deleted, and then an attempt is made to delete B,
>         since a reference to it still exists in gObjectTable.  The problem
>         is that B has presumably already been deleted along with A, since it
>         is a data member of class A.
> 
>         I'm using ROOT 3.02.07 under RH linux 7.2.
> 
> Thanks in advance for assistance,
> Mark



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:40 MET