question about keeeping reference to toStringz()

bauss jj_1337 at live.dk
Thu May 31 11:42:56 UTC 2018


On Thursday, 31 May 2018 at 02:10:53 UTC, Mike Parker wrote:
> 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

Actually thank you for this.

I had no idea you could do that with the GC.


More information about the Digitalmars-d-learn mailing list