#include
using namespace std;
class A{
public:
A(){cout<<"A"; }A(){cout<<"A"; }
};
class B:public A{
A* p;
public:
B(){cout<<"B"; p=new A(); }B(){cout<<"B"; delete p; }
};
int main(void)
{
B obj;
system("pause");
return 0;
输出
ABABA~A
析构函数的调用顺序是与构造函数的调用顺序相反。但是你这里p所指对象是动态创建的,它的创建和销毁是由new和delete决定的,如果new和delete在代码里位置不一样,输出结果就不一样.