virtual destructor

In C++, a virtual destructor is a destructor with the virtual keyword.
Deleting a derived class object using a pointer of base class type that has a non-virtual destructor results in undefined behavior. To correct this situation, the base class should be defined with a virtual destructor. 
As a guideline, any time you have a virtual function in a class, you should immediately add a virtual destructor (even if it does nothing). This way, you ensure against any surprises later. 
We can have virtual destructors but not constructors. 
```
#include <iostream>
using namespace std;

class A {
public:    
    virtual ~A() { cout << "A" << endl; }
};
class B : virtual public A {
public:    
    ~B() { cout << "B" << endl; }
};
class C : virtual public A {
public:    
    ~C() { cout << "C" << endl; }
};
class D : public B, C {
public:
    ~ D() { cout << "D" << endl; }
};

int main() {
    A* d = new D();
    delete d;
    return 0;
}

/*
D
C
B
A
*/
```