On Saturday, 17 December 2011 at 21:02:58 UTC, so wrote:
On Sat, 17 Dec 2011 21:20:33 +0200, Andrei Alexandrescu
<seewebsiteforem...@erdani.org> wrote:

On 12/17/11 6:34 AM, so wrote:
If you are using singleton in your C++/D (or any other M-P language) code, do yourself a favor and trash that book you learned it from.

---
class A {
static A make();
}

class B;
B makeB();
---

What A.make can do makeB can not? (Other than creating objects of two
different types :P )

Singleton has two benefits. One, you can't accidentally create more than one instance. The second, which is often overlooked, is that you still benefit of polymorphism (as opposed to making its state global).

Andrei

Now i am puzzled,
"makeB" does both and does better. (better as it doesn't expose any detail to user)

Both of your examples are the singleton pattern if `make` returns the same instance every time, and arguably (optionally?) A or B shouldn't be instantiable in any other way.

I suspect that the reason a static member function is prevalent is because it's easy to just make the constructor private (and not have to mess with things like C++'s `friend`). In D, there's no real difference because you can still use private members as long as you're in the same module.

The only difference between them I can see is that the module-level function doesn't expose the class name directly when using the function, which is but a minor improvement.

Reply via email to