On 8 dec 2006, at 14:03, Graeme Geldenhuys wrote:

There is a lot of things in life we shouldn't do, but we do.  :-)
At least give us the choice, maybe via a compiler directive and keep
the compiler warning in place.  That way we can use it responsibly
when required,

This is a generic argument which you can use in support of pretty much any relaxing of semantic/syntax rules.

as in the case of implementing a true singleton. I'm
sure there are more examples. As it stands currently (my sample
singleton code) the developer can still screw up by creating a new
instance instead of going through the global function.

This particular issue is caused by the fact that in Delphi-style Object Pascal classes automatically inherit from TObject, which has a public constructor. And if you override the constructor with your own, they no longer can do that either (although it's obviously a run time and not compile time check).

One thing that could be changed is the compile so that you get a compile-time error if you try

type
  tc = class
    constructor create; virtual; abstract;
  end;

var
  c: tc;
begin
  c := tc.create
end.

(currently this compiles with only a warning about the fact that tc has abstract methods)


It would however still only give a run time error if you'd instead do

type
  tc = class
    constructor create; virtual; abstract;
  end;

 ttc = class of tc;

var
  cc: ttc;
  c: tc;
begin
  cc := tc;
  c := cc.create;
end.


Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to