On 2/10/20 1:18 PM, JN wrote:
class IntValue
{
int x = 5;
}
class Foo
{
IntValue val = new IntValue();
}
void main()
{
Foo f1 = new Foo();
Foo f2 = new Foo();
assert(f1.val == f2.val);
}
Is this expected?
Define "expected" ;)
It's been this way for a while actually. It's the way it's currently
implemented, but I wouldn't say that anyone really expects this. The end
result is you just shouldn't create default values for object members.
Or should each Foo have their own IntValue object?
That would be ideal.
They're equal right now, changing one changes the other. When exactly is
the "new IntValue" happening? On program init, or when calling new Foo()
for the first time?
The new IntValue is happening at compile-time and stuck in the static
data segment. Then every new instance of Foo gets a pointer to that one
instance.
-Steve