Unintentional sharing?

Andy Valencia dont at spam.me
Thu Jun 6 17:49:39 UTC 2024


I was using instance initialization which allocated a new object. 
  My intention was this initialization would happen per-instance, 
but all instances appear to share the same sub-object?  That is, 
f1.b and f2.b appear to point to a single object?  Obviously I 
moved the new into the initializer code, but I hadn't appreciated 
how initial instance values were calculated once.  Interestingly, 
this makes it similar to how Python calculates default argument 
values for functions.

class Bar {
     int z = 3;
}

class Foo {
     auto b = new Bar();
}

void
main() {
     import std.stdio : writeln;

     auto f1 = new Foo(), f2 = new Foo();
     f1.b.z = 0;
     writeln(f2.b.z);
}


More information about the Digitalmars-d-learn mailing list