216 ◾ Software Essentials
Why? e Derived class destructor was not invoked so the deallocation
code in the Derived destructor did not run.
Consider Example 7.21. Test this code yourself. When delete is called
on the base class pointer b, the call to the destructor is statically bound so
only the Base class destructor res: the 500 integers allocated on the heap
for the Derived class object thus leak, through no fault of the application
programmer. Memory leaks arise because the Derived class allocates heap
memory but the Derived destructor was not invoked.
Example 7.21: C++ Memory Leak: Only Base Destructor Called
// class hierarchy: Base ok; Derived class allocates heap memory
class Base
{ …
public:
Base() { … } // #A
~Base() { … }
…