[Issue 7541] New: Postblit not called when returning from an array of structs.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Feb 19 03:21:04 PST 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7541
Summary: Postblit not called when returning from an array of
structs.
Product: D
Version: D2
Platform: All
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: johnaston.dev at gmail.com
--- Comment #0 from John Aston <johnaston.dev at gmail.com> 2012-02-19 03:20:58 PST ---
import std.stdio;
struct S
{
string m_str = "defaultString";
this(this)
{
writeln("In this(this)");
}
~this()
{
writeln("In ~this():"~m_str);
}
}
struct Holder
{
S[] m_arr;
S m_s;
this(S[] arr)
{
m_arr = arr;
m_s.m_str="H.m_s";
}
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().
This issue was discussed in:
http://stackoverflow.com/questions/9344579/why-is-thisthis-not-called-when-returning-from-array-of-structs
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list