c++ 构造函数调用顺序解析,该怎么解决

c++ 构造函数调用顺序解析
各位谁能帮忙详细解析一下以下程序

#include "stdafx.h"
#include 
using namespace std;
class A
{
public:
A(){cout<<"A ";}
~A(){cout<<"~A ";}
};

class B

public:
B(int j){cout<<"B ";} 
~B(){cout<<"~B ";}
};

class C

public:
C(){cout<<"C ";} 
virtual ~C(){cout<<"~C ";}
};

class D : public C

public:
D(int j)
{
cout<<"D ";
pb = new B(j);
}
~D()
{
delete pb;
cout<<"~D ";
}

private:
B *pb;
A a;
};
int _tmain(int argc, _TCHAR* argv[])
{
C* pc = new D(1);
delete pc;

return 0;
}

上面程序执行结果为:( )

A. C A D B ~B ~D ~A ~C

B. C A D B ~C

C. C D B A ~A ~B ~D ~C

D. C D B A ~C

------解决方案--------------------
探讨

接楼上继续:
实际上D的构造函数是先于A的构造函数被调用的,不过A先于D构造完成
D和B就没什么说得了