not expected pointers for struct members from foreach
deed
none at none.none
Tue Oct 9 15:59:08 PDT 2012
On Tuesday, 9 October 2012 at 16:21:47 UTC, bearophile wrote:
> deed:
>
>> // Again, why are the three last adresses the same?
>
> The D language and its compiler is acting correctly here, so
> the output you see is correct. All those structs are allocated
> on the stack. The first three Test are allocated on the stack.
> In the loop it allocates the first struct on the stack, and it
> gets destroyed. Then when the successive loop enters, it
> creates a new struct, and it uses the same stack space.
>
> See:
>
> import std.stdio;
>
> struct Test {
> static Test*[] psObject;
> int x;
> this(int a) {
> x = a;
> psObject ~= &this;
> }
> ~this() {
> writeln(x);
> }
> }
>
> void main() {
> Test(0);
>
> foreach (i; 1 .. 3)
> Test(i);
>
> Test.psObject.writeln();
> }
>
>
> 0
> 1
> 2
> [12FE48, 12FE54, 12FE54]
>
> Bye,
> bearophile
Meaning struct pointers are unusable or at least highly
unreliable?
More information about the Digitalmars-d-learn
mailing list