Delegate is left with a destroyed stack object

David Nadlinger code at klickverbot.at
Wed Oct 30 12:57:47 PDT 2013


On Wednesday, 30 October 2013 at 07:49:48 UTC, Jacob Carlborg 
wrote:
> On 2013-10-29 22:57, Ali Çehreli wrote:
>
>> Imagine someone decides to return a lambda from foo() instead:
>>
>> auto foo()
>> {
>>     S s = S(1);
>>     return {};    // <-- Should 's' be immortal now?
>> }
>>
>> Too subtle for my taste! :)
>
> Of course not. "s" is never referred to in the returned 
> delegate.

Yes, only variables actually referenced by a nested fiction are 
placed in the nested context.

I agree that the fact that an object's destructor is not run at 
the end of the parent function should ideally be more easily 
visible, but given the inherently implicit nature of D's 
closures, I'm not sure we can do much about that.

David


More information about the Digitalmars-d mailing list