[fpc-pascal] methods of an object to create others objects

Martin fpc at mfriebe.de
Mon Jul 5 22:14:33 CEST 2010


On 05/07/2010 21:03, Marcos Douglas wrote:
> I use this technique a lot, but thanks :)  Unfortunately, this is not
> the *problem*.
>
> The ask is:
> If a function creates, inside, a object and there is no variable to
> receive this pointer, will happen a memory leak?
>
> In my eg before, this is Okay:
> obj2 := obj.createObj;
>
> The obj2 is a pointer to release.
>
> But, like that:
> obj1.createObj; //no variable to receive
>
> ...now, where is the pointer to release?
>    

That would be, if a crash happens inside obj1.createObj? Because 
otherwise the obj is stored in obj2.

If it happens in there, then handle it in there => there is result as 
variable.

function TMyObject.creatObj : TSomeObj;
begin
   result := TsomeObject.create;
end;


function TMyObject.creatObj : TSomeObj;
begin
   result := TsomeObject.create;
   try
     DoFooBar;
   except
     result.Free; // will not be used by caller, but be aware it has 
still a value, which now is invalid
   end;
end;

In the line
   result := TsomeObject.create;

the only crash that can happen is inside "create" => a crash in the 
constructor is handled by the compiler, the object will be freed.

Martin






More information about the fpc-pascal mailing list