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