A pure virtual - or abstract - destructor needs an implementation in C++. For example this program does not link because of "undefined reference to A::~A".
class A {
public:
virtual ~A() =0;
};
class B : public A { };
int main()
{
B b;
}
This contradicts the definition of abstract functions. As on the one hand there is no other way to make a class whithout methods abstract and on the other hand a destructor must always be available there is no way out.
As far as I can see this is the consequence of Stroustrup's decision to not introduce too much new key words in order to not brake too much old C code.
Seen on "Scott Meyers, Effective C++, Item 14".