On Tuesday, 21 May 2019 at 11:54:08 UTC, Robert M. Münch wrote:
Is there a trick to accomplish 2 when objects are created from different scopes which need to be kept? So, I have one function creating the objects and one using them. How can I keep things on the stack between these two functions?

How is 3 done? Is this only useful for static variables?

I'll try to describe rules 2 and 3 as simply as possible: As long as you can access the pointer to gc allocated memory in D it will not be freed.

So whether that pointer lives on the stack:

int* foo() {
    return new int;
}
void bar() {
    int* a = foo();
    c_fn(a);
}

In static or thread local memory:

int* a;
__gshared int* b;
void bar() {
    a = new int;
    c_fn(a);
    b = a;
    c_fn(b);
}

Or on the heap:

class D {
    int* a;
}
void bar() {
    D d = new D(new int);
    c_fn(d.a);
}

Doesn't really matter.

Reply via email to