[Fwd: [ROOT] Little hint about pointers]

From: Alberto Pulvirenti (alberto.pulvirenti@ct.infn.it)
Date: Tue Nov 20 2001 - 16:26:08 MET


...and another hint: what improvement could I gain using THashList 
instead of TObjArray?

-------- Original Message --------
Subject: [ROOT] Little hint about pointers
Date: Tue, 20 Nov 2001 13:11:29 +0100
From: Alberto Pulvirenti <alberto.pulvirenti@CT.INFN.IT>
Organization: University of Catania
To: roottalk <roottalk@pcroot.cern.ch>

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?
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?

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 I was clear, could you give me a hint about this question?

Regards by Alberto



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:09 MET