> On Apr 16, 2019, at 6:10 PM, Sven Barth via fpc-devel
> <[email protected]> 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
_______________________________________________
fpc-devel maillist - [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel