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?
Can/should option (1) always be avoided?
Assuming non-ancient version of the language, yes. As far as I can tell, only reason to use an empty non-default destructor is to support C++03 and older standard.
What should be considered when selecting one over others?
override
specifier).As a rough rule of thumb, use 3. if possible. If not possible (for example, the PIMPL case described above), then use 2. If not possible (i.e. you need to support C++03), then use 1.