[fpc-pascal] Variants with classes and records

Sven Barth pascaldragon at googlemail.com
Thu Oct 6 14:16:16 CEST 2022


Hairy Pixels <genericptr at gmail.com> schrieb am Do., 6. Okt. 2022, 13:49:

>
>
> > On Oct 6, 2022, at 12:45 PM, Sven Barth <pascaldragon at googlemail.com>
> wrote:
> >
> > Am 05.10.2022 um 14:16 schrieb Hairy Pixels via fpc-pascal:
> >> Is it possible to assign a class to a variant? I tried and get a crash.
> If not, why not? It’s just a pointer so I would expect it to work.
> >
> > There is no field that would hold a class reference and no type value
> that would differentiate it, thus the code handling variants would not be
> able to finalize (aka free) a class correctly. You can of course always use
> a custom type and handle that yourself. *shrugs*
>
> Oh so the problem is variant thinks it should try to manage memory for
> you? I tried doing:
>
>   v: variant;
> begin
>   v := GetMem(100);
>
> And that crashed also. I thought it would be ok to just hold the reference
> but not claim ownership over it.
>

Variants count as managed types and they can contain interface references
and strings. If you use a custom type you can do as you please, but the
internal types that can be assigned to a Variant *are* managed accordingly
(if the types themselves are managed).

Regards,
Sven

>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20221006/f7f617a7/attachment.htm>


More information about the fpc-pascal mailing list