The following code snippet works although my destructor of class B is declared private. Whereas, if I do not derive my class B virtual the following program fails to compile. Why? I am using VC++ 5.0.

class A {

public:
A() {
cout<<"\nIn constructor of A";
}

~A() {
cout<<"\nIn destructor of A";
}
};

class B : virtual public A {

public:
B() {
cout<<"\nIn Constructor of B";
}
private:
~B() {
cout<<"\nIn Destructor of B";
}
};

void main(void)
{
B b;
}