Hi Alberto, On Tue, 20 Nov 2001 13:11:29 +0100 Alberto Pulvirenti <alberto.pulvirenti@ct.infn.it> wrote concerning "[ROOT] Little hint about pointers": > Dear all (but maybe it's Rene who knows the answer) > > I've a little question about dynamic memory allocation. Follow this > example to understand what the question is. > > I have two classes, say 'C1' and 'C2', inheriting from TObject. In > particular, in the C2 is defined a data-member which points to a C1 object: > > class C2 : public TObject { > > . > . > . > > public: > > . > . > . > > C1 *fPointer; > > . > . > . > > }; > > > In my work, I have created a TObjArray, say obj_arr, where I stored many > objects of class C1. When I create a C2 object, I initialize its > fPointer data-member to point to one of the elements of the 'obj_arr' > collection: > > C2 *c = new C2; > c->fPointer = (C1*)obj_arr->At(k); > > However, I need to delete the C2 object, without deleting the C1 object > it points to. Then, what must I put in the C2 destructor? > > If I use this one: > > C2::~C2() { > delete fPointer; > } > > will it erase the memory, cancelling the C1 object even if I keep in RAM > the TObjArray where it was initially stored? Yes. > Or this will remove only the link, but, given that there is another > class which points to that memory slot (obj_arr, in this case), the C1 > object will be kept and not deleted? Yes and no. The link exists in th obj_arr, but it points to deallocated memory, and you're likely to get a SIGSEGV if you try access it. > The question comes from the observation I did that, without using the > destructor I presented you, it seems to come a large memory leak, so I > thought it was necessary to use it... If you send the message TObjArray::Delete, it will delete all objects pointed to by the array, so that's what you need to do. > If I was clear, could you give me a hint about this question? See the attached code. See also chapter 8 in the Users Guide (Yeps, RTM). Yours, Christian Holm Christensen ------------------------------------------- Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91 DK-2200 Copenhagen N Cell: (+45) 28 82 16 23 Denmark Office: (+45) 353 25 305 Email: cholm@nbi.dk Web: www.nbi.dk/~cholm
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:09 MET