views:

54

answers:

3

This has probably been asked before on SO, but I were unable to find a similar question.

Consider the following class hierarchy:

class BritneySpears
{
  public:

    virtual ~BritneySpears();
};

class Daughter1 : public BritneySpears
{
  public:

    virtual ~Daughter1(); // Virtual specifier
};

class Daughter2 : public BritneySpears
{
  public:

    ~Daughter2(); // No virtual specifier
};

Is there a difference between Daughter1 and Daughter2 classes ?

What are the consequences of specifying/not specifying virtual on a sub-class destructor/method ?

Thanks.

+6  A: 

No you technically do not need to specify virtual. If the base method is virtual then C++ will automatically make the matching override method virtual.

However you should be marking them virtual. The method is virtual after all and it makes your code much clearer and easier to follow by other developers.

JaredPar
Many good answers here. I choosed the most popular :) Thanks to all of you.
ereOn
+5  A: 

Virtual is automatically picked up on derived method overrides regardless of whether you specify it in the child class.

The main consequence is that without specifying virtual in the child it's harder to see from the child class definition that the method is in fact virtual. For this reason I always specify virtual in both parent and child classes.

Mark B
+4  A: 

You do not need it, but marking it so may make your code clearer.

Note: if your base class has a virtual destructor, then your destructor is automatically virtual. You might need an explicit destructor for other reasons, but there's no need to redeclare a destructor simply to make sure it is virtual. No matter whether you declare it with the virtual keyword, declare it without the virtual keyword, or don't declare it at all, it's still virtual.

JRL