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