Object destructor is called immediately when object is removed from memory.
Object is removed from memory when it goes out of scope (eg. local variables created on the stack in C++ go out of scope when the method completes)
A similar effect is achieved in GarbageCollected environments with an idiom like:
|file| [ file := File open: 'filename.txt'. self use: file. ] ensure: [file close].The file will be closed in a deterministic, statically scoped way. This idiom can be generalised more by using block closures, thus:
File withOpen: 'filename.txt' do: [:file| self use: file].or whatever.
I have seen numerous discussions/arguments about the usefulness (or not) of DF in a garbage-collected world, or indeed whether it's possible to elegantly integrate determinism into garbage-collected languages (I'm talking about releasing memory here, not external resources/handles). Is it really an either/or decision, or are there languages which deal with the problem (if it really is a problem) successfully?