[fpc-pascal] operator overloading and counting references / creating / destoying anonymous instances

Sven Barth pascaldragon at googlemail.com
Fri Jul 29 11:39:23 CEST 2011

Am 28.07.2011 23:04, schrieb Mark Morgan Lloyd:
> I wonder if I could ask a silly question here, without displaying too
> much ignorance.
> I generally understand the significance of an interface in the Windows
> context, where COM (or whatever today's name for it) is integrated
> fairly deeply into the OS.
> But what of other OSes like Linux? Does the use of interfaces as a way
> of getting refcounted storage assume the presence of CORBA etc., and how
> much overhead is there at program startup- does it demand that an ORB be
> loaded into memory?

While COM-interfaces in Delphi/FPC are designed to be Delphi compatible, 
they do not rely on COM. Basically a IInterface or IUnknown is simply an 
interface that contains calls for increasing/releasing a reference 
count. You as the implementor of the interface need to provide the 
implementation. So e.g. TInterfacedObject which implements IInterface 
implements a reference counting mechanism where the object is freed when 
the reference count reaches zero. In FPC/Delphi this reference count is 
normally controlled by the compiler by calling the methods of IUnknown, 
but in C/C++ these calls need to be done manually (AFAIK).

CORBA-interfaces as implemented by FPC are just plain interfaces without 
any methods defined. Also the compiler does not generate code to 
influence the reference count as it does with COM-interfaces.

Basically an interface in FPC/Delphi is something that allows you to use 
certain methods (those provided by the interface) without knowing what 
the implementing class does. The COM-interface just contain a bit more 
compiler magic, but that's it.

So no, you don't need an ORB or something like that.


PS: There is also a third kind of interfaces called dispinterface that 
contain again more compiler magic and are indeed used with COM 
automation (or XPCOM on non-Windows).

More information about the fpc-pascal mailing list