[fpc-pascal] Question about System.Move()
Nico Neumann
n.neumann93 at gmail.com
Sat Jan 9 23:15:50 CET 2021
For checking if it's a managed type you should use the IsManagedType
intrinsic.
You could also use it to implement the System.Move() for non-managed types.
The compiler only generates the appropriate code:
If IsManagedType(T) then
// for loop
else
// move
Best Regards
Nico
Bart via fpc-pascal <fpc-pascal at lists.freepascal.org> schrieb am Sa., 9.
Jan. 2021, 22:55:
> 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
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20210109/3b4fb653/attachment.htm>
More information about the fpc-pascal
mailing list