grauzone wrote: > The garbage collector isn't guaranteed to to free and destroy an > unreachable object. That's because the GC is conservative. So if you > want to be sure the object's resources are freed, you have to do it > explicitly. > > I think you have two choices: > 1. Remove close() from the destructor, and call close() manually when > you're done. > 2. Use scope or delete to ensure the destructor is always directly > called, and never by the GC. > > > Here's how you can use scope: > > { > scope BlockFile f = new BlockFile(...); > //... do something with f > } //f goes out of scope, and the compiler inserts delete f;
If you're going to do that, you really should make the it a scope class to ensure you never accidentally let the GC try to delete it. I (and a few others) petitioned what feels like years ago for a simple argument to dtors to distinguish between deterministic destruction (delete/scope) and automatic destruction (GC). Never gained any ground, sadly. -- Daniel