On Mon, 5 Jun 2006 15:15:19 +0300 "George Birbilis" <[EMAIL PROTECTED]> wrote:
> > >> It happens when you try to free an object which either you didn't > > >> create, or you've already set free. > > > > > > Only when the pointer to the object is containin nil. This > > is not the > > > case if you free an object and also not the case if the variable > > > pointing to that object is on the stack and it is not created. > > > > > > > classes declared with the keyword class are never stored on the stack. > > > > I haven't followed your discussion, just mentioning here that > > X.Free > > Should never fail since it's a class method and its implementation checks > if X is nil. It's not a class method. It's a normal method. IMO this has been confused several times in this thread. A class method has the 'class' keyword in front of it. Mattias > If it's not it calls the destructor of "self" (which is the > hidden param each method gets passed to and will be X in this case) > > Procedure TObject.Free; > begin > if self<>nil then > self.Destroy; > end; > > It doesn't do self:=nil, think it would corrupt the runtime if it did > > To clear the pointer there's the "FreeAndNil" function, that is: > > Function FreeAndNil(var x); > begin > if x<>nil then > begin > TObject(x).Free; > x:=nil; > end; > end; > > Never call FreeAndNil on an interface reference (or anything else than a > TObject reference) in Delphi, it will crash and burn. I think the "bug" in > Delphi's implementation is that it should have used a typed "x" parameter > at FreeAndNil, not an untyped pointer. Not sure if this has been fixed > after Delphi7 original version (maybe at some update or at higher Delphi > versions) > > Function FreeAndNil(var x:TObject); > begin > if x<>nil then > begin > TObject(x).Free; > x:=nil; > end; > end; > > ---------------- > George Birbilis ([EMAIL PROTECTED]) > Microsoft MVP J# for 2004-2006 > Borland "Spirit of Delphi" > * QuickTime, QTVR, ActiveX, VCL, .NET > http://www.kagi.com/birbilis > * Robotics > http://www.mech.upatras.gr/~Robotics > http://www.mech.upatras.gr/~robgroup > > > > > _____ > > avast! Antivirus <http://www.avast.com> : Outbound message clean. > > > Virus Database (VPS): 0623-0, 05/06/2006 > Tested on: 5/6/2006 3:15:17 ?? > avast! - copyright (c) 1988-2006 ALWIL Software. > > > > _________________________________________________________________ > To unsubscribe: mail [EMAIL PROTECTED] with > "unsubscribe" as the Subject > archives at http://www.lazarus.freepascal.org/mailarchives _________________________________________________________________ To unsubscribe: mail [EMAIL PROTECTED] with "unsubscribe" as the Subject archives at http://www.lazarus.freepascal.org/mailarchives
