digitalmars.D.learn - How do you initialize a class instance which has static storage within
- Enjoys Math (3/3) Jan 30 2016 class A { static B b; } class B {}
- anonymous (9/12) Jan 30 2016 It works when you make b const/immutable:
- Enjoys Math (12/15) Jan 30 2016 More info:
- Chris Wright (6/27) Jan 30 2016 You should use a static constructor:
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 2016
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 levelIt 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 2016
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 levelMore 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 2016
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:You should use a static constructor: class A { static B b; static this() { b = new B(); } }class A { static B b; } class B {} doing b = new B() does NOT work. Nor could I create a this() {} at module levelMore info: B : A so I can't do class A { this () { if (b is null) { b = new B(); } } }
Jan 30 2016