[fpc-pascal] Implementing a true Singleton - Can we decrease the visibility of a method?

Vincent Snijders vsnijders at quicknet.nl
Fri Dec 8 14:15:32 CET 2006


Graeme Geldenhuys schreef:
> On 12/8/06, Jonas Maebe <jonas.maebe at elis.ugent.be> wrote:
>> Quote:
>>
>> "You should not change the access modifier for inherited members."
>>
>> So it's possible but discouraged, and they give warnings (and
>> sometimes errors) for it with the recommendation "Do not exclude a
>> warning from this rule."
> 
> 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, 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.
> 

I think it cannot be prevented.

Suppose you could hide the constructor and TSingleton.Create was not 
visible, I still could create a TSingleton object and call the 
TObject.Create on it.

var
   Singleton1, Singleton2: TSingleton;
begin
   Singleton1 := TSingleton.CreateInstance;
   TObject(Singleton1).Create;
   Singleton2 := TSingleton.CreateInstance;
   TObject(Singleton).Create;
   // now there are two Singleton objects.
end.



More information about the fpc-pascal mailing list