[fpc-pascal] Class vs Object type
    Santiago A. 
    svaa at ciberpiula.net
       
    Thu Apr  7 12:58:14 CEST 2016
    
    
  
El 06/04/2016 a las 13:23, Graeme Geldenhuys escribió:
> "The difference between objects and classes is mainly that an object is
> allocated on the stack, as an ordinary record would be, and that classes
> are always allocated on the heap."
>
> Are there pros or cons to either?
>
> Regards,
>   - Graeme -
A nice pro of objects is that, if you don't need a constructor, you can
forget about calling create and free.
If you need a constructor (ie it has virtual methods), there is not that
advantage.
Moreover, if the object uses classes instances that must be freed, you
also must call destructor, then any advantage is over. Maybe a little
performance gain using stack instead of heap.
A nice feature would be default creator and destructor:
ej.
type
  TMyObject=Object
    constructor default;
    Destructor default;
  end;
procedure foo;
var
 obj:TMyObject;
begin
  // Default constructor (if it has) automatically called here
  obj.xxxx;
  obj.zzz;
  // Default destructor automatically called here
end;
Or even with parameters
type
 TMyObjectParam=Object
   constructor default(n:Integer);
   Destructor default;
 end;
procedure foo;
var
 obj1:TMyObjectParam(7);
 obj2:TMyObjectParam;
begin
 // Default constructor of obj1 automatically called here with param 7
 // Default constructor of obj2 not called because the declaration has no parameters
 obj1.xxxx;
 obj1.zzz;
 if condition then begin
   obj2.Default(x); // Constructor must be called manually
   obj2.xxxx;
   obj2.zzz;
 end; 
 // Default destructor of obj2 automatically called here if it has been initializated
 // Default destructor of obj1 automatically called here
end;
-- 
Saludos
Santi
svaa at ciberpiula.net
    
    
More information about the fpc-pascal
mailing list