代码如下,为了说明问题只给出关键部分
class A {
int *p;
~A() {delete [] p};
A() {p = new int[100];}
};
class B {
A a;
B(A e) {a = e;}
};
在程序退出的时候,会出现异常,然后exception指向A的析构函数~A()那一行。(vs2010环境)
然后我不得不点击abort终止程序。
但是当我修改class B如下
class B {
A *a;
B(A *e) {a = e;}
};
程序退出时就没有异常发生了。即A的析构函数~A()被顺利执行了。
按照类的销毁顺序,是先B后A,为什么第一种情况不能正常的销毁A呢?
换句话说,为什么在B类中定义A或A的指针,在程序退出时会有这种区别呢? |