2 AnswersNew Answer
The reason is that your destructor isn't virtual. When you assign an object of class B to an pointer of class A, no information about the underlying type of the pointer is available. So when delete is supposed to call the destructor, it calls the one associated with the type of the pointer, which is A. So you only see ~A even when you are trying to destroy an object of type B. This is why a virtual destructor is supported in C++. To fix this issue, simply make the destructor of the base class (A in this case) as virtual (Simply add the virtual keyword before the declaration). This will enable the compiler to call appropriate destructors for objects of subclasses assigned to pointers of superclasses when deleted using delete.
Kinshuk Vasisht Thank you very much