www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How do you initialize a class instance which has static storage within

reply Enjoys Math <enjoysmath gmail.com> writes:
class A { static B b; } class B {}

doing b = new B() does NOT work.

Nor could I create a this() {} at module level
Jan 30
next sibling parent anonymous <anonymous example.com> writes:
On 30.01.2016 22:52, Enjoys Math wrote:
 class A { static B b; } class B {}

 doing b = new B() does NOT work.

 Nor could I create a this() {} at module level
It works when you make b const/immutable: class A {static immutable B b = new B;} class B {} If you want/need b to be mutable, you can use a static constructor (`static this`), either in the class or the module: class A {static B b; static this() {b = new B;}} class B {} class A {static B b;} static this() {A.b = new B;} class B {} You could also set it in `main` or another function that runs before b is used, of course.
Jan 30
prev sibling parent reply Enjoys Math <enjoysmath gmail.com> writes:
On Saturday, 30 January 2016 at 21:52:20 UTC, Enjoys Math wrote:
 class A { static B b; } class B {}

 doing b = new B() does NOT work.

 Nor could I create a this() {} at module level
More info: B : A so I can't do class A { this () { if (b is null) { b = new B(); } } } Since it OVERFLOWS THE STACK!!
Jan 30
parent Chris Wright <dhasenan gmail.com> writes:
On Sat, 30 Jan 2016 22:02:10 +0000, Enjoys Math wrote:

 On Saturday, 30 January 2016 at 21:52:20 UTC, Enjoys Math wrote:
 class A { static B b; } class B {}

 doing b = new B() does NOT work.

 Nor could I create a this() {} at module level
More info: B : A so I can't do class A { this () { if (b is null) { b = new B(); } } }
You should use a static constructor: class A { static B b; static this() { b = new B(); } }
Jan 30