上面程序的结果是多少?如何分析的 多谢!

下面程序的结果是多少?怎么分析的 谢谢!!!!
C/C++ code

class Base{
public:
       int m_a;
       Base(int a = 2):m_a(a){printf("A %d",m_a);}
       virtual ~Base() {printf("B %d",m_a);}
};
class Derived : public Base {
public:
       Derived (int a = 4):Base(a){printf("C %d",m_a);}
       ~Dwrived (){printf("D %d",m_a);}
};
int main()
{
      Base *aa,bb;
      aa =new Derived;
      delete aa;
      return 0;
}






------解决方案--------------------
对不起,还漏了一个,最后在退出main()函数时(退回到startup code),此时局部对象bb超出作用域范围,所以发生析够,所以结果应该还增加一项: B 2.即最终结果为:
A 2A 4C 4D 4B 4B 2
------解决方案--------------------
C/C++ code

class Base{
public:
       int m_a;
       Base(int a = 2):m_a(a){printf("A %d",m_a);}
       virtual ~Base() {printf("B %d",m_a);}
};
class Derived : public Base {
public:
       Derived (int a = 4):Base(a){printf("C %d",m_a);}
       ~Derived (){printf("D %d",m_a);}
};
int main()
{
      Base *aa,bb;
      aa =new Derived;
      delete aa;
      return 0;
}
//记住:构造是先从父类开始构造,再到子类,析构以相反的方向析构!