[fpc-devel] Forward Record
Sven Barth
pascaldragon at googlemail.com
Thu Dec 5 11:25:09 CET 2024
Amir via fpc-devel <fpc-devel at lists.freepascal.org> schrieb am Do., 5. Dez.
2024, 00:57:
> I wonder why? Is there any technical difference between classes and
> records for the purpose of forward declaration?
>
Yes, there is. Classes are implicit pointer types, thus when you have a
field that is of type class then it's size will always be the size of a
Pointer. Records (and TP-style objects) have a different size depending in
their fields and this size needs to be known when you use a record (or
TP-style object) directly as a field.
> My use-case was to define a few records like the following:
>
> type
> TData = record
> ....
> function ToA: TA;
> end;
>
> TA = record
> Data: TData;
> ....
> end;
>
> I know I can define classes instead of record, but I do not want to do so,
> since I need to "Free" the objects.
>
You could add a record helper below the declaration of TA for TData instead
of declaring ToA inside of TData:
=== code begin ===
TDataHelper = record helper for TData
function ToA: TA;
end;
=== code end ===
The usage is the same as if you had declared the method inside of TData.
Regards,
Sven
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20241205/92204325/attachment.htm>
More information about the fpc-devel
mailing list