> On Jun 10, 2019, at 3:25 PM, Ben Grasset <operato...@gmail.com> wrote:
> 
> Result in your example is the size of a pointer in all cases, which is fine / 
> exactly what you'd expect it to be.
> 

Sorry, if I dereference the size is still of TBase. I don’t think “result" is 
actually changing depending on the class type. This may have something to do 
with the way new works though. How can we fix this? 

type
  PBase = ^TBase;
  TBase = object
    constructor Initialize;
    class function Create: PBase; static;
  end;

class function TBase.Create: PBase;
begin
  new(result, Initialize);
  writeln('create: ', sizeof(result^));
end;

constructor TBase.Initialize;
begin
  writeln('create tfoo')
end;

type
  PChild = ^TChild;
  TChild = object (TBase)
    y: string;
  end;

var
  c: PChild;
begin
  c := PChild(TChild.Create);


Regards,
        Ryan Joseph

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to