[fpc-pascal] A serious Memleak using delegates/implements (was: Delegate Interface class does not seem to be referenced counted)

stdreamer stdreamer at freemail.gr
Fri Oct 7 19:32:22 CEST 2016


On 07/10/2016 18:33 μμ, Marcos Douglas wrote:
> We don't need "clean up properly" instances that is interface-based.
> If this solve the problem for contained objects, I'll do it!
> BUT, if I do this I can forget all about  TContainedObject or
> TAggregatedObject? If I can't, this not make sense.

OK this needs a bit more information.

The interface variable is only a half measure. It assumes and expects 
that the container (the object that has a delegation) will always get 
destroyed after all references to the delegated interface are released. 
It does not check for it and it leaves everything to the programmer. If 
the contained interface needs the container to function properly then a 
number of of exception will be raised as soon as the container gets freed.
The TContainedObject on the other hand makes sure that the container can 
not be destroy as long as there are references on the contained 
interface which is a much safer solution.

I have used both with success in the past I still prefer the 
TContainedObject approach for this little extra piece of mind that it 
provides me.




More information about the fpc-pascal mailing list