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()

Reply via email to