Quick question:

When I call delete, it returns that object's memory to the heap, right?

That being true, then when a program exits, then is delete called for every heap allocation made in the program, or does this need to be done manually (via a linked list or just keeping track of the pointers)?