Hi,


The compiler will do this wrapping anyway if you use ansistrings, so the
approach with e.g. a generic record will not cause a lot of overhead in most cases.

But using strings or anything similar causes a lot of overhead

It is really bad



Bye,
Benito
On 21.05.23 18:03, Michael Van Canneyt via fpc-pascal wrote:


On Sun, 21 May 2023, Hairy Pixels via fpc-pascal wrote:



On May 21, 2023, at 2:47 PM, Michael Van Canneyt via fpc-pascal <fpc-pascal@lists.freepascal.org> wrote:

Your example will leak memory in any case, even if there is no exception,
since you're not freeing the object anywhere..

doh, dumb example on my behalf.


Assuming the result of A is not used outside of Test, the following is the
only solution:

procedure Test;

var
A : TObject;
begin
 A:=TObject.Create;
 Try
   // call some code in other unit which raise an exception
   DoThis;
 finally
   A.Free
 end;
end;

You can try to use interfaces, they will be managed by the compiler.

This is what I was worried about, wrapping all functions or needing full ARC on all types. Very risk to opt in to this design I would say. I remain not a fan of exceptions. :)

They're used all over the place in the RTL and FCL, so you better take them
into account.

The compiler will do this wrapping anyway if you use ansistrings, so the
approach with e.g. a generic record will not cause a lot of overhead in most
cases.

Michael.
_______________________________________________
fpc-pascal maillist  - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to