Reputation: 55786
This has probably been asked before on SO, but I was 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 ?
Upvotes: 31
Views: 6413
Reputation: 78013
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 automaticallyvirtual
. You might need an explicit destructor for other reasons, but there's no need to redeclare a destructor simply to make sure it isvirtual
. No matter whether you declare it with thevirtual
keyword, declare it without thevirtual
keyword, or don't declare it at all, it's stillvirtual
.
- C++ FAQ - When should my destructor be virtual?
Upvotes: 10
Reputation: 755259
No you technically do not need to specify virtual
. If the base member function is virtual then C++ will automatically make the matching override member function virtual
.
However you should be marking them override
, which ensures that it's virtual
, and also that it overrides a member function in the base class. The method is virtual
after all, and it makes your code much clearer and easier to follow by other developers.
Note: prior to C++11, you could make the overriding member function just virtual
, since override
isn't available yet.
Upvotes: 41
Reputation: 96291
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.
Upvotes: 7