[fpc-pascal] Managed types within records

Sven Barth pascaldragon at googlemail.com
Thu May 28 21:09:09 CEST 2015


Am 28.05.2015 18:16 schrieb "J├╝rgen Hestermann" <juergen.hestermann at gmx.de>:
>
> Hi,
>
> when I have a record which has managed types (i.e. strings),
> how are they handled by the compiler when I assign one record to the
other?
> Example:
>
> ---------------------------------------------------
> type MyRecordType = record
>                                       X : SizeInt;
>                                       S : AnsiString;
>                                       end;
> var A,B : ^MyRecordType;
>
> begin
> new(A);
> new(B);
> A^.X := 7;
> A^.S := 'String in A';
> B^ := A^;
> Dispose(A);
> end;
> ---------------------------------------------------
>
> What happens to the reference counter of S?
> Is it updated correctly (assigned to zero with new,
> incremented with B^:=A^ and decremented with dispose)?

Yes, they are handled correctly. The compiler inserts a call to a RTL
function that does a per-element copy using the record's RTTI instead of
doing a memory copy (this is true for all records even if they don't have
managed types).

Regards,
Sven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20150528/de9035ae/attachment.html>


More information about the fpc-pascal mailing list