How to use D without the GC ?

bachmeier no at spam.net
Fri Jun 14 13:48:19 UTC 2024


On Friday, 14 June 2024 at 07:52:35 UTC, Dukc wrote:
> Lance Bachmeier kirjoitti 14.6.2024 klo 4.23:
>> We must be talking about different things. You could, for 
>> instance, call a function in a C library to allocate memory at 
>> runtime. That function returns a pointer and you pass it to 
>> SafeRefCounted to ensure it gets freed. Nothing is known about 
>> the allocation at compile time. This is in fact my primary use 
>> case - allocating an opaque struct allocated by a C library, 
>> and not wanting to concern myself with freeing it when I'm 
>> done with it.
>
> Using a raw pointer as the `SafeRefCounted` type like that 
> isn't going to work. `SafeRefCounted` will free only the 
> pointer itself at the end, not the struct it's referring to. If 
> you use some sort of RAII wrapper for the pointer that `free`s 
> it at it's destructor, then it'll work - maybe that's what you 
> meant.

See the example I posted elsewhere in this thread: 
https://forum.dlang.org/post/mwerxaolbkuxlgfepzwc@forum.dlang.org

I defined

```
@nogc ~this() {
   free(ptr);
   printf("Data has been freed\n");
}
```

and that gets called when the reference count hits zero.


More information about the Digitalmars-d-learn mailing list