fork download
  1. #include <iostream>
  2.  
  3. class A
  4. {
  5. public:
  6. A() {}
  7. virtual ~A();
  8. int aVar;
  9. };
  10. A::~A()
  11. {
  12. std::cout << "Call ~A()" << std::endl;
  13. }
  14.  
  15. class B : public A
  16. {
  17. public:
  18. B() {}
  19. virtual ~B();
  20. };
  21. B::~B()
  22. {
  23. std::cout << "Call ~B()" << std::endl;
  24. }
  25.  
  26. class C : public B
  27. {
  28. public:
  29. C() {}
  30. int cVar;
  31. virtual ~C();
  32. };
  33. C::~C()
  34. {
  35. std::cout << "Call ~C() [cVar == " << cVar << "]" << std::endl;
  36. }
  37.  
  38.  
  39. int main()
  40. {
  41. A* aObj = new A;
  42. aObj->aVar = 777;
  43.  
  44. B* bObj = new(aObj)B;
  45.  
  46. C* cObj1 = new(bObj)C;
  47. //cObj1->cVar = 1;
  48.  
  49. C* cObj2 = new(bObj)C;
  50. //cObj2->cVar = 2;
  51.  
  52. delete bObj;
  53.  
  54. return 0;
  55. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
Call ~C() [cVar == 0]
Call ~B()
Call ~A()