楼上的,其实如果按照上面你说的情况,我想结果更应该是先调用A对象的析构函数,再调用B的析构函数//此句不妥,怎么会是这样呢。因为,如果B中不止一个资源需要释放,当释放A对象所占资源时去调用A的析构函数;然后再调用B的析构了//此处不应该是“再调用”,只是返回B的析构函数继续执行。按照我们通常考虑函数嵌套调用的方法去考虑这个问题时,就会得到和事实相反的结果。
#include<iostream.h>
class baseone
{
public:
baseone(){cout<<"baseone() called!\n";}
~baseone(){cout<<"~baseone() called!\n";}
};
class basetwo
{
public:
basetwo(){cout<<"basetwo() called!\n";}
~basetwo(){cout<<"~basetwo() called!\n";}
};
class derive
{
public:
derive(){cout<<"derive() called!\n";}
~derive(){cout<<"~derive() called!\n";one.~baseone();two.~basetwo();} //虽然显式调用基类析构函数,系统还是会再一次调用基类析构函数
baseone one;/////////
basetwo two;//改变 one 与two 的声明先后会导致系统自动调用 baseone 与 basetwo的析构函数顺序不同
};
void main()
{
derive der;
}
最终~basetwo()与~baseone()都调用了两次
try new catch