On Saturday, 2 February 2019 at 16:56:45 UTC, Ron Tarrant wrote:
So, my big question is, do I instantiate like this:
DSingleton singleton = new DSingleton;
Or like this:
DSingleton singleton = singleton.get();
And subsequent calls would be...? The same? Using get() only?
This seems to be a case where D's definition of "private" can
cause confusion versus examples from other languages with private
as "access only inside the class". In other languages
DSingleton singleton = new DSingleton;
would never compile (the desired behavior), since the constructor
is private.
But D allows it in some cases due to "private to class OR
module". If DSingleton is in the same module, as for example in a
small test program with DSingleton and main() in the same file,
then it compiles.
So I think your code is fine, it's just that it can be
circumvented - the private constructor can be called - if
DSingledton and the instantiating code are in the same module.