Singleton Pattern with struct

Ali Çehreli acehreli at yahoo.com
Thu Jan 24 09:00:44 PST 2013


On 01/24/2013 08:52 AM, ParticlePeter wrote:

 > This method here ( my first approach ) does return a reference to an
 > object on the heap, right ?

Yes, but the caller does not get a reference.

 > 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 ?

When you print the type of another_s you will see that it is not a ref, 
because unlike C++, D does not have local ref variables; it has pointers 
for that purpose.

import std.stdio;

ref int foo()
{
     return *new int;
}

void main()
{
     auto i = foo();
     writeln(typeid(i));
}

Prints 'int', not 'ref int'. So, i is a copy of the dynamically created int.

Ali



More information about the Digitalmars-d-learn mailing list