What is the philosophy of managing memory in C++ ??
Apologies for the vast scope of question. But what is the design factor in managing memory in C++ ??? 
For example: why is there a memory leak when a program does not release a memory object before it exits ? Isn't a good programming language design supposed to maintain a "foo-table" that takes care of this situation ? I know I am being a bit naive, but what is the design philosophy of memory management in C++ with respect to classes, structs, methods, interfaces, abstract classes??

Certainly one cannot humanely remember every spec of C++. What is the core driving design of memory management ?
What is the philosophy of managing memory in C++ ??
===

Apologies for the vast scope of question. But what is the design factor in managing memory in C++ ??? 
For example: why is there a memory leak when a program does not release a memory object before it exits ? Isn't a good programming language design supposed to maintain a "foo-table" that takes care of this situation ? I know I am being a bit naive, but what is the design philosophy of memory management in C++ with respect to classes, structs, methods, interfaces, abstract classes??

Certainly one cannot humanely remember every spec of C++. What is the core driving design of memory management ?