If you think about it: The call to the destructors is done after free_unused_pobjects completed. The memory of the objects without destructors is already freed. If you are still in an out of memory situation when the destructors are run, then its also very likely that you are in a not much better situation afterwards.
That's not quite right. You can't reclaim the memory of any object which is reachable from any object with a destructor which has not yet been called. But you're right that some memory can be reclaimed before calling destructors.
JEff