Hi rooters, After a round with branches, I want to report about several behaviors which I find suspect. I work with g++ 2.95.2 under Linux redhat 6.1, and the class I try to make persistent is basically something like this : template <class T> class MyArray { ... private: int size T * elements ; // [size] ... } ; I have added many display in MyArray and T constructors and destructors to track where I go. Here are the behaviors which disturb me : 1) If I call TTree::Branch on a null pointer to MyArray I observe that a MyArray is contructed, a T is contructed, a T is destructed, and that's all. The MyArray destructor has not been called, yet the pointer is still null. Isn't it a memory leak ? 2) If i call TTree::SetBranchAddress on a null pointer, I observe that a MyArray is constructed and the pointer is not any more null. This difference of behavior with TTree::Branch is on purpose ? Is it necessary for ROOT, or just expected to help the user ? In my case, it does not help, since my strategy is to attach the branch to the pointer at the moment, and affect later the good value to the pointer. 3) If I fill the tree wih an empty array (size and elements attributes are null), put it in a file, and later open the file and I get the corresponding entry, the size is correctly set to 0, but the pointer is left unchanged. If I get another entry, the tree try to delete the pointer and crash. 4) i tried to solve 3) by setting AutoDelete to kFALSE on the branch, but I observed no effect. the T destructors are still called. i misunderstood the role of AutoDelete ? it is not expected to avoid calls to destructors between two calls to GetEntry ? David C.
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:55 MET