In a class (without direct pointer members), I see there are following 3 possibilities for defining a destructor.
class Child : public Parent
{
public:
// ~Child() override {} // (1) explicit destructor with empty body
// ~Child() override = default; // (2) explicit default destructor
// // (3) implicit default destructor
private:
// members
}
Can/should option (1) always be avoided? Because Clang-Tidy hints me to take option (2) if I use option (1).
What are the differences between the three different options in general? What should be considered when selecting one over others?