Strange behavior when concatenating array

Steven Schveighoffer schveiguy at yahoo.com
Fri Jun 17 03:42:51 PDT 2011


On Fri, 17 Jun 2011 00:05:56 -0400, Jose Armando Garcia  
<jsancio at gmail.com> wrote:

> It looks like the rt is not calling the postblit constructor when
> concatenating arrays. For example, the following code:
>
> import std.stdio;
>
> struct Test
> {
>    this(this) { writeln("copy done"); }
>    void opAssign(Test rhs) { writeln("assignment done"); }
>    ~this() { writeln("destructor called"); }
> }
>
> void main()
> {
>    Test[] tests = new Test[1];
>    {
>       Test test;
>       tests ~= test;
>    }
>    writeln("done");
> }
>
> Gives the following output:
>
> destructor called
> done
>
> The dtr for 'Test test;' is getting call after the scope exits but the
> postblit ctr for 'tests[0]' is never called. I believe the output of
> this code should either be:
>
> done
>
> or:
>
> copy done
> destructor called
> done
>

You are right, postblit should be called.   
http://d.puremagic.com/issues/show_bug.cgi?id=5272

I'll look at doing a fix.

-Steve


More information about the Digitalmars-d-learn mailing list