[fpc-pascal] Freeing memory with exceptions
Hairy Pixels
genericptr at gmail.com
Wed May 24 15:34:12 CEST 2023
> On May 21, 2023, at 11:03 PM, Michael Van Canneyt via fpc-pascal <fpc-pascal at lists.freepascal.org> wrote:
>
> 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.
I wanted to add to my example. What about this? The exception now provides a challenge to clean up without ARC in all places. Very risky right? My sense is that exceptions are only safe for fully ARC languages or garbage collected.
var
obj: TObject;
begin
try
obj := TObject.Create;
// This object list will free the items in another part of the program
if CheckSomething(...) then
begin
list.Add(obj);
addedToList := true;
end;
// maybe we passed it to another class also...
// Raises an exception in another unit, caller doesn't know!
DoThis;
finally
// we need to remember to remove the item from the list now and
// what happens if we passed the reference to another class?
// we need to check if this actually happened also so declare a local var to check
if addedToList then
list.Delete(..);
if passedToOtherClass then
otherClass.obj := nil;
obj.Free;
end;
end.
Regards,
Ryan Joseph
More information about the fpc-pascal
mailing list