Hi Dario, The default constructor is automatically called by ROOT to: - create an instance and invoke the Streamer function when reading an object from a file - build the dictionary when required by several tools (Inspect, DrawClass, Browse, etc). You can detect when your default constructor is called in these special cases by testing if (TClass::IsCallingNew()) { //you are in the special case //do not allocate objects inside this constructor } else { // do what you want } Rene Brun On Wed, 9 Jul 2003 Dario.Motta@mpi-hd.mpg.de wrote: > Dear rooters, > in the root documentation and elsewhere you recommend not to allocate > memory in the default constructors, to avoid memory leaks. > I've followed the "Event" example in the test directory, where "control" > static variables (fgTracks) are defined for the initializations, such that > memory is allocated just once. > Now my code has got more complicated and I need to call in the same > program several times object constructors to define different objects of > the same class and I need to allocate memory for each of them. > I understand that it is possible to introduce as many static pointers as > the number of calls (like: fgTracks1, fgTracks2, fgTracks3...) and stop > allocating new memory when all the static variables have been initialized. > But doing so one loses in generality: I have to know in advance how many > different objects of each class I will need, whereas this number > can be different case by case... > Can you suggest a clever and elegant solution to this problem? > > At the moment I've allocated memory in the constructor and checked whether > in my typical applications I've memory leaks. It doesn't seem to be the > case... > > Thanks and best regards, > > Dario Motta >
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:13 MET