以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  C++疑问,请高手帮忙解答  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=74767)


--  作者:chiyx
--  发布时间:5/11/2009 10:49:00 AM

--  C++疑问,请高手帮忙解答
我最近正学C++,在一个测试异常使用的程序中遇到一个关于构造与析构对象的问题
,源代码如下:
#include<iostream.h>

class Excpt
{
public:
 Excpt(){cout<<"calling Excpt()"<<endl;}
 ~Excpt(){cout<<"calling ~Excpt()"<<endl;}
    const char* ShowReason () const
 {
  return "EXCpt 类异常.";
 }
};

class Demo1
{
public:
 Demo1();
 ~Demo1();
};

Demo1::Demo1()
{
 cout<<"构造Demo1()"<<endl;
}
Demo1::~Demo1()
{
 cout<<"析构Demo1()"<<endl;
}

void MyTest()
{
 Demo1 D;
 cout<<"在MyTest()中抛掷Excpt类异常"<<endl;
 throw Excpt();
}

void main()
{
   cout<<"在mian()函数中"<<endl;
   try
   {
    cout<<"在 try 语句中,调用MyTest()函数."<<endl;
    MyTest();
   }
   catch(Excpt e)
   {
    cout<<"在catch异常处理程序中."<<endl;
    cout<<"捕获到Excpt类异常"<<endl;
    e. ShowReason ();
   }
   catch(char * str)
   {
    cout<<"捕获到其他类异常"<<str<<endl;

   }

   cout<<"返回mian().从这里恢复执行."<<endl;

}

运行结果如下:

mian()函数中
try 语句中,调用MyTest()
造Demo1()
MyTest()中抛掷Excpt类异常
lling Excpt()
lling ~Excpt()
构Demo1()
catch异常处理程序中.
获到Excpt类异常
lling ~Excpt()
lling ~Excpt()
回mian().从这里恢复执行.

疑问:为什么会只调用一次Except()类的构造函数,却调用了3次他的析构函数!??


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
31.250ms