Although the memory manager can recover unreachable memory, it cannot free memory that is still reachable and therefore potentially still useful.
In general, automatic memory management is more robust and convenient for developers, as they don't need to implement freeing routines or worry about the sequence in which cleanup is performed or be concerned about whether or not an object is still referenced.