Restricting D applications to a single instance

Steven Schveighoffer schveiguy at gmail.com
Mon Feb 22 02:39:58 UTC 2021


On 2/21/21 9:29 PM, Preetpal wrote:
> I want to restrict a D application to a single instance. Is there a way 
> to do this using the D standard library?

When you say "application", you mean a class or type?

If so, you can do this:

class C
{
    private this() { /*ctor code for single instance */ }
    private static C _instance = new C();
    public C instance() { return _instance; }
}

You can also do it with a struct, but it's not as bullet-proof:

struct S
{
   @disable this();
   private static S _instance;
   ref S instance() { return _instance; }
}

But one can always do this, and the compiler will never prevent it:

S s = S.init;

All these have an instance per thread.

If you want a global singleton that is initialized on first use, use the 
D singleton pattern: https://wiki.dlang.org/Low-Lock_Singleton_Pattern

-Steve


More information about the Digitalmars-d-learn mailing list