[fpc-devel] class operator overloads
Ryan Joseph
ryan at thealchemistguild.com
Wed Apr 17 02:43:00 CEST 2019
> On Apr 16, 2019, at 6:10 PM, Sven Barth via fpc-devel <fpc-devel at lists.freepascal.org> wrote:
>
> Mutating is also not the solution. Consider this:
>
> === code begin ===
>
> operator + (aLeft, aRight: TSomeClass): TSomeClass;
> begin
> aLeft.DoSomething(aRight);
> Result := aLeft;
> end;
>
> var
> a, b, c: TSomeClass;
> begin
> a := TSomeClass.Create;
> b := TSomeClass.Create;
> c := a + b;
> a.Free;
> b.Free;
> c.Free; (* boom! *)
> end.
>
> === code end ===
>
> A user does not necessarily know what an operator overload does.
>
> For records and TP style objects this is not a problem, because they are copied, but for classes only their pointer is copied (and this either leads to the above problem or memory leaks if temps are involved).
>
> Regards,
> Sven
I see why that could be a problem but aren’t users reasonable for not doing dangerous things in a language like Pascal with low-level memory access? They can already do this anyways via operator functions so it’s already too late. :) If you want a language that prioritizes safety then Pascal is already a bad choice so I think most people know how to be safe.
What this means is that’s it harder for more advanced programmers to do things like add + and := operator to collection classes like arrays and that’s pretty unfortunate. At this point it’s already been smuggled in via operator functions so I think the team should reconsider allowing them for classes.
Regards,
Ryan Joseph
More information about the fpc-devel
mailing list