https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120890
--- Comment #1 from De Rycke, Dirk <Dirk.DeRycke at kla dot com> --- // the simple example #include <cstdio> #include <iostream> class vBaseClass { public: vBaseClass () { printf ("Construct %s\n", __PRETTY_FUNCTION__); } virtual ~ vBaseClass () { printf ("Destruct %s\n", __PRETTY_FUNCTION__); } virtual void print () { printf ("%s\n", __PRETTY_FUNCTION__); } }; class derivedClass:public vBaseClass { public: derivedClass () { printf ("Construct %s\n", __PRETTY_FUNCTION__); } ~derivedClass () { printf ("Destruct %s\n", __PRETTY_FUNCTION__); } void print () { printf ("%s\n", __PRETTY_FUNCTION__); } }; using std::cout; int main (int argc, char *argv[]) { cout << "Test 1: base var\n"; vBaseClass * testObjs = new derivedClass[2]; testObjs[0].print (); delete[]testObjs; cout << "Test 2: derived var\n"; derivedClass * testObjs2 = new derivedClass[2]; testObjs2[0].print (); delete[]testObjs2; } output Test 1: base var Construct vBaseClass::vBaseClass() Construct derivedClass::derivedClass() Construct vBaseClass::vBaseClass() Construct derivedClass::derivedClass() virtual void derivedClass::print() Destruct virtual vBaseClass::~vBaseClass() <- missing derived destructor Destruct virtual vBaseClass::~vBaseClass() <- missing derived destructor Test 2: derived var Construct vBaseClass::vBaseClass() Construct derivedClass::derivedClass() Construct vBaseClass::vBaseClass() Construct derivedClass::derivedClass() virtual void derivedClass::print() Destruct virtual derivedClass::~derivedClass() Destruct virtual vBaseClass::~vBaseClass() Destruct virtual derivedClass::~derivedClass() Destruct virtual vBaseClass::~vBaseClass()