// Not much new stuff here. Illustration of virtual destructors in A-B-C class hierarcy. // Shows that we only need to declare a virtual destructor in the base class. #include using namespace std; class A { private: double a; public: A(double a): a(a){}; virtual ~A(){cout << "A destructor" << endl;} // Class A is assumed to have virtual functions. //.... }; class B : public A { private: double b; public: B(double b): A(b-1), b(b){}; ~B(){cout << "B destructor" << endl;} //... }; class C : public B { private: double c; public: C(double b): B(b-1), c(b){}; ~C(){cout << "C destructor" << endl;} //... }; void f(){ A *a1 = new C(5.0); // Work on a1 // .... delete a1; // The destructor in C is called. // The destructor in B is called. // The destructor in A is called. } int main(){ f(); }