Is it possible to avoid call to destructor for structs?
    Haridas 
    haridas at systemc.net
       
    Sun Sep 24 18:15:51 UTC 2017
    
    
  
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;
}
    
    
More information about the Digitalmars-d-learn
mailing list