[fpc-devel] Warning: Constructor should be public
    Graeme Geldenhuys 
    graemeg.lists at gmail.com
       
    Tue Apr  7 00:11:07 CEST 2009
    
    
  
On Mon, Apr 6, 2009 at 10:37 PM, Léo Willian Kölln <leokolln at gmail.com> wrote:
> No.
> See my singleton example:
How did I guess it was going to be about implementing a Singleton.
This issue has been raised a thousand times in FPC and Delphi circles.
:)
>
> TLoggerGeral = class
Which means you are descending from TObject.
>  private
>  {$IFDEF WINDOWS}
>    class var FInstance : TLoggerGeral;
>  {$ELSE}
>    {$STATIC on}
>    FInstance : TLoggerGeral; static;
>  {$ENDIF}
>
>    constructor Create;
Which means you are trying to lower the constructor TObject.Create
from public to private.
>
> A normal singleton and it complain!
I have a much easier "lazy man's" singleton for you... It's not 100%,
but then, I have *never* seen a singleton implementation in Delphi or
FPC that is 100%.  Simply access the singleton via the gMySingleton
method.
eg:
   gMySingleton.DoSomethingCool;
========================
interface
   TMySingleton = class(TObject)
   ...
   end;
function gMySingleton: TMySingleton
implementation
var
  uMySingleton: TMySingleton;
function gMySingleton: TMySingleton;
begin
  if not Assigned(uMySingleton) then
    uMySingleton := TMySingleton.Create;
  result := uMySingleton;
end;
[...snip the rest of TMySingleton implementation...]
initialization
  uMySingleton := nil;
finalization
  uMySingleton.Free;
end.
========================
The reason you can't lower the visibility of the constructor or any
method for that matter... A class interface (implementation section) ,
even for TObject as in your example, is a contract of how you can use
that class and what is available to you.  By lowering the visibility
of a method or constructor in a descendant class, you are breaking the
contract previously defined. This is a BIG no-no, hence the reason it
is not allowed.
Regards,
  - Graeme -
_______________________________________________
fpGUI - a cross-platform Free Pascal GUI toolkit
http://opensoft.homeip.net/fpgui/
    
    
More information about the fpc-devel
mailing list