On Tuesday, 29 October 2013 at 21:57:25 UTC, Ali Çehreli wrote:
On 10/29/2013 02:41 PM, David Nadlinger wrote:
> Closures follow the infinite lifetime model – the struct
scope is never
> left, if you want.
Agreed but the implicit nature of things is troubling. Imagine
that the program depends on the destructor to be called:
It may be confusing but I agree that disabling dtor invocation at
the end of function scope is a right decision. Technically scope
is left, but lifetime continues.
> This is not exactly a new scenario, destructors on new'd
structs aren't
> called either (unless you manually destroy them).
At least in the case of a new'ed structs I have a convenient
way to destroy them through a pointer. I think in the case of a
closure I must go through hoops to access or save that pointer.
Ali
This is not a big deal.
Another but similar case:
import std.stdio;
struct S
{
int i;
~this() { writefln("dtor %X, %X", &this, i); }
}
auto foo()
{
S s = S(1);
struct SS
{
void bar() { s = S(2); }
}
return SS();
}
void main()
{
foo().bar();
}
So, one need also to be aware of nested structs (or functions)
touching local objects.