On Mon, 20 May 2019, James Richters wrote:

I’m wondering if there is a way to test if a tstringlinst has been created yet?



I looked at the documentation in these two locations:

https://lazarus-ccr.sourceforge.io/docs/rtl/classes/tstringlist.html

and

https://lazarus-ccr.sourceforge.io/docs/rtl/classes/tstrings.html



but they do not show things like the .Create or .Free procedures, so I am
thinking .Create and .Free are some kind of fundamental procedures that
are used by generally everything in ‘classes’ maybe   so if there was some
function that would tell me if the TStringList existed, it would be in
with .Create and .Free….  But I’m not sure where that would be documented.

.Create and .Free are indeed fundamental constructors and destructors for
classes. They are documented in the ancestors of TString(List).

A stringlist (or an object in general) exists if it is non-nil:

Procedure DoSomething(var A : tStringList);

begin
  if A=Nil then
    A:=TStringList.Create;
end;

Also can someone explain that the purpose of .Destroy is and why I would use 
.Free  Vs  .Destroy ?

.Free Can be called on a Nil instance (if the list does not exist yet)

so:
A.Free;
will check if A is non-nil, and calls A.Destroy if this is the case.
If you call .Destroy in a nil instance, errors will occur.

Note that Free or Destroy will free the instance, but will NOT set the
instance pointer to Nil.

So in the Above example:

A:=TStringList.Create;
A.Free;
if A<>Nil then
  Writeln('A not nil');

will print
A not nil.

If you want to nil the pointer (recommended practice) then you should use
FreeAndNil:

FreeAndNil(A);

Meaning that

A:=TStringList.Create;
FreeAndNil(A);
if A<>Nil then
  Writeln('A not nil');

Will not print anything.

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to