Doubt about Struct and members
matheus
matheus at gmail.com
Mon Jan 8 20:17:40 UTC 2024
On Monday, 8 January 2024 at 17:56:19 UTC, H. S. Teoh wrote:
> ...
> It's not recommended to use initializers to initialize mutable
> array-valued members, because it probably does not do what you
> think it does. What the above code does is to store the array
> ["ABC"] somewhere in the program's pre-initialized data segment
> and set s to point to that by default. It does NOT allocated a
> new array literal every time you create a new instance of S;
> every instance of S will *share* the same array value unless
> you reassign it. As such, altering the contents array may
> cause the new contents to show up in other instances of S.
>
> This behaviour is generally harmless if your array is
> immutable. In fact, it saves space in your executable by
> reusing the same data for multiple instances of s. It also
> avoids repeated GC allocations at runtime.
> ...
First of all thanks for replying,
Yes I understood the behavior since I even looked the code
generated: https://godbolt.org/z/xnsbern9f
=]
Maybe my question was poorly written (I'm ESL), but you answered
in the other Topic:
> "(Whether the current behaviour should be changed is up for
> debate, though. This definitely isn't the first time users have
> run into this. In fact just today somebody else asked the same
> question on D.learn. So it's definitely in the territory of
> "does not do the expected thing", which is an indication that
> the default behaviour was poorly chosen.)"
I was in doubt about if this was intended or not... and it seems
the case.
I'm not saying it is wrong by any means, I just found a bit
tricky based on the two ways it could change the value pointed by
the address and/or the address of the member itself.
Again thanks,
Matheus.
More information about the Digitalmars-d-learn
mailing list