[fpc-pascal] Freeing memory with exceptions

Michael Van Canneyt michael at freepascal.org
Sun May 21 18:03:03 CEST 2023



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 at 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.


More information about the fpc-pascal mailing list