[fpc-devel] class operator overloads
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;
> Result := aLeft;
> a, b, c: TSomeClass;
> a := TSomeClass.Create;
> b := TSomeClass.Create;
> c := a + b;
> c.Free; (* boom! *)
> === 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).
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.
More information about the fpc-devel