question about keeeping reference to toStringz()
Mike Parker
aldacron at gmail.com
Thu May 31 02:10:53 UTC 2018
On Thursday, 31 May 2018 at 01:12:34 UTC, Dr.No wrote:
>
> is foo() is being called from a thread, how I am supposed to
> keep cstring "alive"?
As Jonathan explained, you don't have to worry about it if foo()
itself doesn't assign the pointer to anything internally. That
will be the case for most C functions. Well-behaved functions
that need to keep the string around will copy it. That said, you
need to be sure you understand fully what any C function you call
is doing with the strings, or pointers to any memory allocated by
the GC, that you pass to them.
In the rare cases where the C function does keep the pointer and
you do need to keep a reference (if you don't have one already),
the simplest approach is this one:
import core.memory;
GC.addRoot(cstring);
Then, when you no longer need it:
GC.removeRoot(cstring);
https://dlang.org/phobos/core_memory.html#.GC.addRoot
More information about the Digitalmars-d-learn
mailing list