Delegate is left with a destroyed stack object

Lionello Lunesu lionello at lunesu.remove.com
Wed Oct 30 02:20:39 PDT 2013


On 10/29/13, 22:42, David Nadlinger wrote:
> On Tuesday, 29 October 2013 at 21:41:25 UTC, Lionello Lunesu wrote:
>> So a copy should have been made of the live object, not the destructed
>> one. Correct?
>
> No. There should only be one struct instance, the one living (forever)
> in the closure context.
>
> David

Why? It's a struct. It should be completely fine to create a copy [on 
the heap] for the closure context.

The way I see closure is that any referenced locals become hidden 
arguments. Imagine an implicit ", S s" in the closure's parameter list. 
Everybody would expect 's' (being a value type) to be a copy.

If you want to ensure there's only one instance, you either need to use 
class instead of struct, or allocate 's' on the heap and use a pointer to S.

L.


More information about the Digitalmars-d mailing list