Struct bug?

Biotronic simen.kjaras at gmail.com
Mon Oct 2 09:58:17 UTC 2017


On Monday, 2 October 2017 at 09:34:29 UTC, Andrea Fontana wrote:
> Anyway: you cant put a default destructor on struct

True. In which case you should either @disable this() (which 
presents its own set of issues) or hide b behind a @property 
function, something like:

struct S {
     B _b;

     @property
     B b() {
         if (_b is null) _b = new B();
         return b;
     }
}

This exact same issue also crops up for classes, since 
typeid(T).initializer is simply blitted over the newly allocated 
memory. At least for classes we could change the language such 
that:

class C {
     int[] p = new int[5];
}

is sugar for:

class C {
     int[] p;
     this() {
         p = new int[5];
     }
}

No such solution exists for structs, since they don't have 
default constructors.

--
   Biotronic


More information about the Digitalmars-d-learn mailing list