Thanks Adam

Actually Bar's API and implementation is not in my control. Consider the scenario where it is implemented in a library. Or a scenario where I have millions of instances of Bar (not necessarily as a component of Foo) and I do not want to add to runtime memory footprint.

Ok, consider the following code. Now I am (seemingly) avoiding a call to Bar's destructor by way of using pointers. But I have doubts if delete on void pointer would reclaim the memory that has been allocated while still not calling the destructor?

// >>>>
import std.stdio;

struct Foo {
  Bar* bar;
  this(size_t l) {
    bar = cast(Bar*) new Bar[l];
  }
  ~this() {
    writeln("~Foo");
    void *tmp = cast(void*) bar;
    // would this reclaim memory
    // allocated to Bar*
    delete(tmp);
  }
}

struct Bar {
  ~this() {
    writeln("~Bar");
  }
}

void main() {
  Foo foo = 4;
}

Reply via email to