[ROOT] delete vs. Delete()

From: Mike Kordosky (kordosky@dell4.hep.utexas.edu)
Date: Tue Oct 10 2000 - 21:08:32 MEST


Hi,

I am a rather new C++/ROOT programmer and I am confused about the operator
delete and the member function Delete().  Here is a code section that I
want to use as an example:

while(1){
	TMessage *dmess;
	// daqsock is a TSocket*, created earlier
	// len is an Int_t, declared earlier
	// mtype is a Unt_t, declared earlier
	len=daqsock->Recv(dmess);
	mtype = dmess->What();
//
//	other code here
//
	// now done with dmess
	dmess->Delete();
	
	// kMESS_RAWI32 is a message type that I defined
	if( mtype == kMESS_RAWI32)
		continue;
	else
		break;
}

My confusion arises over the fact that this loop will only execute
once.  The second time through it causes a seg fault when I do
len=daqsock->Recv(dmess);.  What exactly did Delete do here?

The solution to this problem is to substitute:

delete dmess; <-> dmess->Delete();

Everything seems to work ok in this case, but I don't really know why!  I
think that I understand the role of delete in removing objects from the
heap, but, then what does Delete() do?  Does Delete() remove objects from
the stack(!)?  My question is, when do I use Delete()?  What, precisely,
does Delete() do?

Thanks!

Mike Kordosky

-- 
Graduate Research Assistant  // High Energy Physics Lab
kordosky@hep.utexas.edu     // University of Texas at Austin
ph: (512) 471-3526



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:35 MET