Why default destuctor for an abstract class is not virtual?

c++, virtual-destructor

Solution

Because in C++ you don't pay for what you don't need, and a virtual destructor adds overhead (even in already polymorphic classes) that isn't needed in many cases. For example you might not need polymorphic destruction and choose to have a protected destructor instead.

Further, as an alternative scenario, imagine that you have a class with a virtual method that does desire polymorphic destruction. Now imagine that the other `virtual` method is no longer needed and removed but polymorphic destruction is still needed. Now you have to remember to go back and add a virtual destructor or suffer undefined behavior.

Finally I think it would be hard to justify changing the default virtualness of the destructor (and it alone) based on whether a class is polymorphic or not rather than always and consistently making a destructor non-vurtual unless requested otherwise.

Problem

Consider ``` class A { public: virtual void foo () = 0; }; ``` At this point it is absolutely obvious that `A` is an abstract class and will never be instantiated on it's own. So why the standard doesn't demand that automatically generated destructor must be virtual as well? I ask myself this question every time I need to define a dummy virtual desctuctor in my interface classes and can't see why the commetee did't do this. So the question: why generated destructor in an abstract class is not virtual?

Original source