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