On Sunday, 7 February 2016 at 22:35:57 UTC, anonymous wrote:
On 07.02.2016 23:07, Márcio Martins wrote:
The destructor you are seeing is from the assignment:
m_tileView = TileView(...);
This creates a temporary TileView, copies it to m_tileView,
and then
destroys it. I suppose you want to move it instead. You need
to copy the
handles from the temporary into the destination, and then
clear them out
from the temporary to prevent them from being released.
I think you're mistaken here. The result of a struct literal is
usually moved implicitly.
Code:
----
import std.stdio;
struct S
{
~this() {writeln("dtor");}
}
void main()
{
auto s = S();
writeln("end of main");
}
----
Output:
----
end of main
dtor
----
If there was a copy that's destroyed after the assignment,
there should be another "dtor" before "end of main".
Yeah...and I just stuck this into TileView:
@disable this();
@disable this(this);
and it compiled just fine. If it created a copy I assume the
compiler would have choked on that.