Here's my header file: #include <cstdio> #include "Rtypes.h" #include "TObject.h" #ifndef _TEST_ #define _TEST_ class Test:public TObject{ public: Test():testvar(2),testptr(NULL){printf("Test()\n");}; Test(const Test& rhs){printf("Test(const Test& rhs)\n");}; virtual ~Test(){printf("~Test()\n"); if(testptr) delete testptr;}; void SetTest(){if(!testptr) testptr=new Int_t;}; private: Int_t testvar; Int_t* testptr; //[1] ClassDef(Test,1) }; #endif Now my source file (no member function here): #include "Test.h" ClassImp(Test) The code I've tried is this one: TFile f1("test.root","NEW"); Test* mytest=new Test; f1.Add(mytest); f1.Write(); It crashes after the TFile::Write() call... Everything works when I call Test::SetTest() before calling TFile::Add() (notice that Test::SetTest() does nothing if testptr is non-null) because it passes an address to testptr. I want to be able to write a Test instance in the case the function SetTest() isn't called I'm using ROOT 3.05/05 with gcc 3.2.2 Thank you Pierre-Luc Drouin On Fri, 6 Jun 2003, Rene Brun wrote: > Hi Pierre-Luc, > > ROOT supports null pointers in I/O. > I suspect a problem with your destructor. > Make sure to reset to 0 the pointer when you delete the > object. > > As always, try to send an example as short as possible reproducing the > problem. You and me will gain time. > > Rene Brun > > > On > Fri, 6 Jun 2003, Pierre-Luc > Drouin > wrote: > > > Hi, > > > > I've a class that contains a member variable that is a pointer to another > > object. This pointer can be NULL, if there's no need for a hold > > object. The code of my class takes it into account, with > > if(myptr!=NULL) conditions when operations on myptr have to be > > done. However, I've noticed that ROOT craches when I try to save this > > object into a ROOT file. I could use a Int_t variable 'hasptr' that would > > have a value of 0 when there's no object hold by myptr and a value of 1 > > when there's one and I could indicate a size of '// [hasptr]' for ROOT in > > the header file, but this would take useless memory... > > > > Is there a Streamer or similar ROOT function I could overload for this > > class in a way that it could handle a NULL pointer without crashing > > ROOT? > > > > Thank you! > > > > Pierre-Luc Drouin > > >
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:12 MET