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.