How do I create a module-local immutable class object?
Jonathan M Davis
jmdavisProg at gmx.com
Fri Sep 9 14:57:21 PDT 2011
On Friday, September 09, 2011 23:44:10 Timon Gehr wrote:
> On 09/09/2011 11:42 PM, Jonathan M Davis wrote:
> > On Friday, September 09, 2011 17:37:26 bearophile wrote:
> >> Andrej Mitrovic:
> >>> I need to have an object which is initialized only once, so I
> >>> thought
> >>> I could use immutable for that. But I can't do this:
> >>>
> >>> private class Foo {}
> >>> immutable Foo foo;
> >>>
> >>> static this()
> >>> {
> >>>
> >>> foo = new Foo;
> >>>
> >>> }
> >>>
> >>> void main() {}
> >>
> >> private class Foo {}
> >> immutable Foo foo1;
> >>
> >> static this() {
> >>
> >> foo1 = new immutable(Foo);
> >>
> >> }
> >>
> >> void main() {
> >>
> >> auto foo2 = new immutable(Foo);
> >>
> >> }
> >
> > But make the constructor shared. Otherwise, it gets initialized once per
> > thread in spite of the fact that immutable is implicitly shared.
>
> Shouldn't the compiler catch this?
It should, but it doesn't.
http://d.puremagic.com/issues/show_bug.cgi?id=4923
http://d.puremagic.com/issues/show_bug.cgi?id=5207
http://d.puremagic.com/issues/show_bug.cgi?id=6114
More information about the Digitalmars-d-learn
mailing list