fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct A { // Class to trace what happens with attributes of the derived class
  5. A() { cout<<" Create attribute class"<<endl; }
  6. ~A() { cout<<" Destroy attribute class"<<endl; }
  7. };
  8. class X { // Base class
  9. public:
  10. X() { cout<<" Create base class"<<endl; }
  11. virtual void test() { cout<<" Test base class"<<endl; }
  12. ~X() { cout<<" Destroy base class"<<endl; } // oops
  13. };
  14. class XX : public X { // Derived class
  15. A a;
  16. public:
  17. XX() { cout<<" Create derived class"<<endl; }
  18. void test() override { cout<<" Test derived class"<<endl; }
  19. ~XX() { cout<<" Destroy derived class"<<endl; }
  20. };
  21.  
  22. void kill_it (X* t) {
  23. t->test();
  24. delete t;
  25. }
  26.  
  27. int main() {
  28. X *poly;
  29.  
  30. cout<<"1) Test with base class:"<<endl;
  31. poly = new X();
  32. kill_it (poly);
  33.  
  34. cout<<endl<<"2) Test with derived class"<<endl;
  35. poly = new XX();
  36. kill_it (poly);
  37.  
  38. cout<<endl<<"3) How it should be with derived class"<<endl;
  39. {
  40. XX dummy_destroyed_when_leaving_the_block;
  41. }
  42. }
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
1) Test with base class:
  Create base class
  Test base class
  Destroy base class

2) Test with derived class
  Create base class
    Create attribute class
  Create derived class
  Test derived class
  Destroy base class

3) How it should be with derived class
  Create base class
    Create attribute class
  Create derived class
  Destroy derived class
    Destroy attribute class
  Destroy base class