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@79

Reply via email to