On 02.03.2013 03:49, Xiangrong Fang wrote:
Hi there,

If my class constructor looks like this:

constructor TMyClass.Create(fn: string);
begin
   sl := TStringList.Create;
   try
     fs := TFileStream.Create(fn, fmOpenRead);
   except
     self.Destroy;
   end;
end;

No, this is a bad idea. If an exception occurs inside the constructor the destructor will be called automatically. I don't even want to think about what bad things could happen if you call Destroy inside the constructor...

I create the objec like:  MyInstance :=
TMyClass.Create('AnNonExistentFile');  An exception occured, I can
ensure that:

 1. there is no memory leak.

There won't be a memory leak.

 2. the MyInstance variable is assigned *nil*?

If you want to ensure that MyInstance is Nil you need to do it like this:

=== code begin ===

try
  MyInstance := TMyClass.Create('AnNonExistentFile');
except
  MyInstance := Nil;
end;

=== code end ===

Regards,
Sven

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to