In languages such as C and C++, memory must be freed manually.
It is the programmer's responsibility to keep track of all objects that are created
and to destroy them (freeing their memory) when they are no longer needed.
This can be an onerous task and is often the source of bugs.