Great answer ! Thank you very much, it answered almost everything !

But what about, in the exemple you gave me (which is great by the way) if foo as parameters ? Those parameters are passed on the stack by copy to the function, and then, copied to the heap (resulting in two copies) ?

Le 21/09/2011 19:56, Simen Kjaeraas a écrit :
void foo() {
int x = 5;
auto dg = () {x = 4;}
dg();
}

is roughly equivalent to:

typedef struct foo_dg_1_delegate {
void (*funcptr)(struct foo_dg_1_context*);
void* ptr;
};

typedef struct foo_dg_1_context {
int x;
};

void foo_dg_1(struct foo_dg_1_context* ctx) {
ctx->x = 4;
}

void foo(void) {
struct foo_dg_1_delegate dg;
struct foo_dg_1_context* ctx = (struct
foo_dg_1_context*)malloc(sizeof(struct foo_dg_1_context));
dg.funcptr = &foo_dg_1;
dg.ptr = ctx;
ctx->x = 5;
dg.funcptr(dg.ptr);
}


Reply via email to