fork download
  1.  
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. struct C;
  6. struct B;
  7.  
  8. class A{
  9. public:
  10. A(int r): type(r){}
  11. int type;
  12. void deleter();
  13. protected:
  14. ~A(){std::cout << "DTOR A" << std::endl;}
  15. };
  16.  
  17. class B: public A{
  18. public:
  19. B():A(1){};
  20. ~B(){std::cout << "DTOR B" << std::endl;}
  21. };
  22.  
  23. class C: public A{
  24. public:
  25. C():A(2){};
  26. ~C(){std::cout << "DTOR B" << std::endl;}
  27. };
  28.  
  29. void A::deleter(){
  30. if(type==1){
  31. delete static_cast<B* const>(this);
  32. }else if(type==2){
  33. delete static_cast<C* const>(this);
  34. }
  35. }
  36.  
  37. int main(){
  38. A * a = new B();
  39. a->deleter();
  40. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
DTOR B
DTOR A