How to use destroy and free.

Salih Dincer salihdb at hotmail.com
Mon Apr 25 00:26:41 UTC 2022


On Sunday, 24 April 2022 at 21:00:50 UTC, Alain De Vod wrote:
> Is this a correct program to explicit call destroy & free ?
>
> ```
> void main(){
>     int[] i=new int[10000];
>     import object: destroy;
>     destroy(i);
>     import core.memory: GC;
>     GC.free(GC.addrOf(cast(void *)(i.ptr)));
> }
> ```

Yes, first destroy() then free()...
```d
import std.stdio;
import object: doDestroy = destroy;
import core.memory : MEM = GC;

void disposeOf(T)(T obj)
{
     auto mem = cast(void*) obj;
     scope (exit) MEM.free(mem);
     doDestroy(obj);
}

void main()
{
   int[] i = new int[1024];
   i[$-1] = 41;

   doDestroy(i);
   MEM.free(i.ptr);
   // You don't need to addrOf(cast(void*)i)

   //i.length = 1024;
   //assert(i[$-1] == 0);
   //i[$-1].writeln(" am there?");

   if (i !is null)
   {
     "still alive!".writeln;
     disposeOf(i);
   }
   "bye...".writeln;
}
```
SDB at 79


More information about the Digitalmars-d-learn mailing list