[fpc-pascal] Question about System.Move()

Bart bartjunk64 at gmail.com
Sat Jan 9 22:54:05 CET 2021


On Sat, Jan 9, 2021 at 8:14 PM Yuriy Sydorov via fpc-pascal
<fpc-pascal at lists.freepascal.org> wrote:

> > So, I'll use a for loop to copy the data.
> >
> > I assume that doing Arr[Index] := Default(T) will also finalize the
> > element if that element ismanaged?
>
> For class object instances call Arr[Index].Free, for other managed types or records containing managed types
> Finalize(Arr[Index]) should work.

In the base class, is there a way to check wether Arr[Index] is an
object instance or a managed type or a datatype containing a managed
type?
Now the for loop (I abandoned the use of Move) does something like this:
  Arr[NewIndex] := Arr[OldIndex];  //do I have to finalize/free
Arr[NewIndex] also in this case?
  Arr[OldIndex] := Default(T);  //I understand this is not enough in those cases

I could of course add an (empty) method FinalizeOrFreeElement(Elem:
T); to the base class and call that inside the loop, but that feels a
bit sloppy.

-- 
Bart


More information about the fpc-pascal mailing list