Simply put, you have undefined behavior. You do not provide delete[] pointer you received from new[] . You might think that this is so, but for pointers in the version of the array they are the same, their static type must match. You have converted a pointer to a pointer to a base class.
In practice, when you don't have this added float , your implementation probably supports sizeof(B) == sizeof(A) . Thus, calls to the destructor and release functions do nothing harmful. But this is the same as undefined.
Storyteller
source share