Chinaunix首页 | 论坛 | 博客
  • 博客访问: 567448
  • 博文数量: 493
  • 博客积分: 2891
  • 博客等级: 少校
  • 技术积分: 4960
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 17:11
文章分类

全部博文(493)

文章存档

2010年(493)

分类:

2010-05-12 18:24:40

6 考核点
析构函数的调用顺序。
7 试题
class A
{
public:
 A* m_pDelegation;
public:
 A()
 {
  printf("Call A constructor\n");
  m_pDelegation = NULL;
 }
 virtual ~A()
 {
  printf("Call A destructor\n");
  if(NULL != m_pDelegation)
  {
   delete m_pDelegation;
   m_pDelegation = NULL;
  }
 }
};
class BasedA :public A
{
public:
 BasedA()
 {
  printf("Call BasedA constructor\n");
  m_pDelegation = this;
 }
 virtual ~BasedA()
 {
  printf("Call BasedA destructor\n");
 }
};
int main(int argc, char* argv[])
{
 A* pA = new BasedA();
 delete pA;
 return 0;
}
请问:上述这段程序的执行结果为:(D)
A:
Call A constructor
Call BasedA constructor
Call BasedA destructor
Call A destructor
  B:
Call BasedA constructor
Call A constructor
Call BasedA destructor
Call A destructor
  C:
 Call A constructor
Call BasedA constructor
 Call A destructor
Call BasedA destructor
 D:
Call A constructor
Call BasedA constructor
Call BasedA destructor
Call A destructor
Call A destructor
  ....
  最终程序异常退出。
阅读(413) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~