WTF! new in class is static?!?!

Cym13 cpicard at openmailbox.org
Thu Jun 7 21:36:31 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.

The spec looks pretty clear to me on that point 
https://dlang.org/spec/class.html#field-init

Besides, defining behaviour at construction is what constructors 
are for, I wouldn't expect anything outside a constructor to 
happen when an object is constructed. So while I understand that 
other languages may (successfully for them) do things differently 
I don't think I'd like a breaking change for that.


More information about the Digitalmars-d-learn mailing list