Do interfaces need a virtual destructor, or is the auto-generated one fine? For example, which of the following two code snippets is best, and why? Please note that these are the WHOLE class. There are no other methods, variables, etc. In Java-speak, this is an “interface”.
class Base
{
public:
virtual void foo() = 0;
virtual ~Base() {}
};
OR…
class Base
{
public:
virtual void foo() = 0;
~Base() {} // This line can be omitted, but included for clarity.
};
EDIT DUE TO “NOT WHAT I’M LOOKING FOR” ANSWERS:
Exactly what are the consequences of each route. Please don’t give vague answers like “it won’t be destructed properly”. Please tell me exactly what will happen. I’m a bit of an assembly nerd.
Edit 2:
I am well aware that the “virtual” tag means that the destructor won’t get called if deleted through a pointer to derived, but (I think) this question ultimately boils down to “is it safe to omit that destructor, for is it truly trivial?”
EDIT 3:
My second edit is just plain wrong and disinformation. Please read the comments by actual smart people for more info.
Consider the following case:
You need the virtual destructor, otherwise when you delete
Var, the derived class’ destructor will never be called.