Singleton Pattern with struct

ParticlePeter ParticlePeter at gmx.de
Thu Jan 24 08:52:46 PST 2013


> Yes, but this can be broken by:
>
> import core.stdc.stdio : printf;
>
> struct Singleton  {
>
> private :
>         this( int a = 0 ) {} ;
>         static Singleton * s ;
>
> public :
>         @disable this() ;
>         static Singleton* instance()  {
>                 if ( s is null )
>                         s = new Singleton(0) ;
>                 return s ;
>         }
>
>         int val = 0 ;
> }
>
> void main()
> {
>         Singleton s = * Singleton.instance;
>         printf( "%d\n", s.val ) ; //
>         Singleton.instance.val = 2 ;
>         printf( "%d\n", s.val ) ; //0
> }
>
> Here s is explicitly defined to be a struct object, not pointer 
> (reference), so main.s is independent of further modification 
> of Singleton.instance.

O.k. good to know, I'll try to avoid this. But one thing is still 
not clear,
This method here ( my first approach ) does return a reference to 
an object on the heap, right ?

static ref Singleton instance()  {
	if ( s is null )
		s = new Singleton( 0 ) ;
	return * s ;
}

so when I use it with:
auto another_s = Singleton.instance ;

Why is the s inside the struct and another_s not identical ?
Afaik that is the purpose of the ref keyword ?







More information about the Digitalmars-d-learn mailing list