When to declare a destructor virtual in C++?

This question seems to come up quite frequently, so I decided to do some research and try to summarise when should you declare a destructor virtual. The following questions will help you to decide what kind of destructor you need:

Is your class intended to be used as a base class?

Is your base class abstract? (i.e. any virtual pure methods?)

Do you want to allow polymorphic deletion though a base pointer?

References: