What should the following code do and with explanations
<pre><code>class A { 
 public:
  A() { } 
  ~A() { cout &lt;&lt; "A Destructor \n" ; } 
};

class B :public A{ 
   public:
   B() { } 
   virtual ~B() { cout &lt;&lt; "B Destructor \n" ; } 
};

class C : public B {
   public:
   C() { }
   ~C() { cout &lt;&lt; "C Destructor \n"; }
};

int main()
{

   A *pointA = new A;
   A *pointB = new B;
   A *pointC = new C;

   delete pointA;
   delete pointB;
   delete pointC;
}
</code></pre>
