Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
July 24, 2003 Is it possible to great a singleton object in D? | ||||
---|---|---|---|---|
| ||||
Just to avoid confusion, by "singleton" I mean an object of which only one instance can be instanciated, and any subsequent attempts to create an instance of the object return a reference to the first one created. They work great for handling things like configuration information and the like. So anyone have any idea how to create on in D? Thanks Terry |
July 24, 2003 Re: Is it possible to great a singleton object in D? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Terry Bayne | Terry Bayne wrote:
> Just to avoid confusion, by "singleton" I mean an object of which only one instance can be instanciated, and any subsequent attempts to create an instance of the object return a reference to the first one created.
>
> They work great for handling things like configuration information and the like.
>
> So anyone have any idea how to create on in D?
>
> Thanks
> Terry
>
How about just creating one up front, and save it in a global variable?
Bill
|
July 24, 2003 Re: Is it possible to great a singleton object in D? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Terry Bayne | "Terry Bayne" <gnome@hiwaay.net> escreveu na mensagem news:Xns93C28B1B4AEAEtbaynehiwaaynet@63.105.9.61... > Just to avoid confusion, by "singleton" I mean an object of which only one instance can be instanciated, and any subsequent attempts to create an instance of the object return a reference to the first one created. > > They work great for handling things like configuration information and the like. > > So anyone have any idea how to create on in D? > > Thanks > Terry Hi, You can write your singletonas you would do in C++ or Java. Something like this works correctly: module singleton; class Singleton { private static Singleton shared; private static this() { shared = new Singleton(); } private this() { } public static Singleton getInstance() { return shared; } public void print(char[] name) { printf("Hello %.*s! I'm %d.\r\n", name, cast(int*) this); } } int main() { Singleton a = Singleton.getInstance(); a.print("a"); Singleton b = Singleton.getInstance(); b.print("b"); a.print("a"); return 0; } In D you can also define variables in the module scope, "static this" is the module constructor, will run once. Best regards, Daniel Yokomiso. --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.502 / Virus Database: 300 - Release Date: 18/7/2003 |
July 25, 2003 Re: Is it possible to great a singleton object in D? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Terry Bayne | Terry Bayne wrote:
> Just to avoid confusion, by "singleton" I mean an object of which only one instance can be instanciated, and any subsequent attempts to create an instance of the object return a reference to the first one created.
Not through direct syntax. You can synthesize one using a static member and function. You can also force memory recycling:
class Singleton
{
static Singleton singleton;
new (uint size)
{
if (singleton === null)
{
singleton = (Singleton) new void * [(size + 3) / 4];
singleton.init ();
}
return singleton;
}
/* This is used instead of a constructor to avoid having the constructor called multiple times. */
void init ()
{
/* Prepare the singleton. */
}
}
Singleton a = new Singleton (); /* Create the new singleton. */
Singleton b = new Singleton (); /* Recycle the old singleton. */
Unfortunately one can't create a Singleton base class that would have the inherited property, because "new" isn't passed the ClassInfo.
One might ask what I'm doing using "new void * [size / 4]" instead of "new ubyte [size]". Once the GC is type-aware, casting between an array of values and an object reference will result in any pointers in the object being collected. I think I've advocated putting in casting limitations to prevent the problem before, but in any case I am now; you should not be able to cast between a value array and a pointer.
|
July 25, 2003 Re: Is it possible to great a singleton object in D? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bill Cox | In D you can make the ctors private yet the module it's defined in can still access them. So yeah, that should work. Sean "Bill Cox" <bill@viasic.com> wrote in message news:3F204B87.3080201@viasic.com... > Terry Bayne wrote: > > Just to avoid confusion, by "singleton" I mean an object of which only one > > instance can be instanciated, and any subsequent attempts to create an instance of the object return a reference to the first one created. > > > > They work great for handling things like configuration information and the > > like. > > > > So anyone have any idea how to create on in D? > > > > Thanks > > Terry > > > > How about just creating one up front, and save it in a global variable? Bill |
July 25, 2003 Re: Is it possible to great a singleton object in D? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Terry Bayne | A singleton is nearly indistinguishable from a module, in concept. Sean "Terry Bayne" <gnome@hiwaay.net> wrote in message news:Xns93C28B1B4AEAEtbaynehiwaaynet@63.105.9.61... > Just to avoid confusion, by "singleton" I mean an object of which only one instance can be instanciated, and any subsequent attempts to create an instance of the object return a reference to the first one created. > > They work great for handling things like configuration information and the like. > > So anyone have any idea how to create on in D? > > Thanks > Terry |
Copyright © 1999-2021 by the D Language Foundation