Explicitly avoid GC of objects?
Benjamin Schaaf
ben.schaaf at gmail.com
Tue May 21 13:23:54 UTC 2019
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.
More information about the Digitalmars-d-learn
mailing list