Summary: Postblit not called when returning from an array of
           Product: D
           Version: D2
          Platform: All
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD

--- Comment #0 from John Aston <> 2012-02-19 03:20:58 
PST ---
import std.stdio;

struct S
    string m_str = "defaultString";

        writeln("In this(this)");

        writeln("In ~this():"~m_str);


struct Holder
    S[] m_arr;
    S m_s;

    this(S[] arr)
        m_arr = arr;

    S getSMem()
        return m_s;

    S getSVec()
        return m_arr[0];

    S getSLocal()
        S local = S("localString");
        return local;

void main()
    Holder h = Holder(new S[1]);

    S s1 =  h.getSMem();
    S s2 =  h.getSVec();
    S s3 =  h.getSLocal();

The above in Windows D2.058 produces:

In this(this)
In ~this():localString
In ~this():defaultString
In ~this():H.m_s
In ~this():H.m_s

Only one postblit is produced in the above (from the getSMem() call).
The getSLocal() call can just move the struct.
However, getSVec() does not result in a postblit.
I noticed this in the context of a reference counting struct held in a
std.container.Array, and there were too few calls to this(this) compared to

This issue was discussed in:

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to