On Thursday, 11 June 2015 at 21:38:59 UTC, Ali Çehreli wrote:
On 06/11/2015 12:51 PM, Yuxuan Shui wrote:
> On Thursday, 11 June 2015 at 19:23:49 UTC, Ali Çehreli wrote:
>> [...]
>
> Can you explain more about why the destructor is not called
when
> returning a struct?
Are you asking in general or specific to scoped!C?
In general, D has move semantics built into the language. It
depends on whether the returned expression is an rvalue or an
lvalue: rvalues are moved, lvalues are copied. And the
destructor will not be called for a moved object.
About returning scoped!C, I think it works:
import std.stdio;
import std.typecons;
class C
{
~this()
{
writeln("dtor");
}
}
auto foo()
{
auto c = scoped!C();
return c;
}
void main()
{
writeln("entering scope");
{
writeln("calling");
auto s = foo();
writeln("returned");
}
writeln("leaving scope");
}
"dtor" is printed upon leaving the scope:
entering scope
calling
returned
dtor
leaving scope
Ali
I just find out that the document of scoped says that "It's
illegal to move a class instance even if you are sure there are
no pointers to it. As such, it is illegal to move a scoped
object."
So this is not a solution?