WTF! new in class is static?!?!

Stefan Koch uplink.coder at googlemail.com
Thu Jun 7 21:33:58 UTC 2018


On Thursday, 7 June 2018 at 21:07:26 UTC, DigitalDesigns wrote:
> class A;
>
> class B
> {
>    A a = new A();
> }
>
> auto b1 = new B();
> auto b2 = new B();
>
> assert(b1.a == b2.a)!!
>
>
> I'm glad I finally found this out! This is not typical behavior 
> in most languages is it?
>
> I'd expect it to be translated to something like
>
> class B
> {
>    A a;
>    this()
>    {
>        a = new A();
>    }
> }
>
> In C# it is different, can't remember if it is different in 
> C++. This has caused bugs in my code because the fields are all 
> pointing to the same data when I expected them to each have 
> unique data ;/
>
> This method is error prone and the behavior should be reversed, 
> it should not break the majority of code. If one wants the 
> current behavior then static new could be used or something 
> else.

If you want a new one use a constructor call.
initalizers are support to be static, this only works because 
ctfe supports newing classes.



More information about the Digitalmars-d-learn mailing list