社区
C语言
帖子详情
请问C++的异常语句有try except和try finally形式吗
fengxvhui
2003-05-27 10:15:33
我学了全是try catch形式的。
如果有,能否举个例子。
...全文
1363
17
打赏
收藏
请问C++的异常语句有try except和try finally形式吗
我学了全是try catch形式的。 如果有,能否举个例子。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fengxvhui
2003-07-14
打赏
举报
回复
收藏之。
glasswing
2003-07-14
打赏
举报
回复
to fengxvhui(学得快忘得快):
我的意思是,不要随便使用一些编译器加入的非标准C++的语言设施啦。如果某个语言设施真的有必要,可以给BS写信谈谈,让其加入到下一个版本的ISO标准中,呵呵。
‘获得即初始化’技术(很C++的技术,呵呵)并非只是在关闭文件的时候有用;它可以用在任何有某些资源需要被释放的场合。比如内存,你申请使用了以后必须被释放(不同与垃圾收集的一种内存管理方式);比如网络socket;... 方法就是:把任何你要使用的资源封装到一个类中,在类的constructor里获得资源,在distructor中释放资源。这样,你的程序里就很难会出现资源泄露的问题。
vlmf
2003-07-11
打赏
举报
回复
SwordMan2001(天笑2001) :
C++ 标准没有描述异常是是否关闭文件. 但她保证异常发生的时候所有已经构造的对象都会被析构.:)
vlmf
2003-07-11
打赏
举报
回复
bool CommandDriver::ExecCommand(const string& CommandLine)
{
bool bSuc = true;
try
{
CommandPoint pCommand(CreateCommand(CommandLine));
pCommand->Exec();
cout << endl << "^_^ Command: [" << CommandLine << " ] Successfully Complete!" << endl;
}catch(CommandException& e)
{
cout << e.what() << endl;
bSuc = false;
}catch(ICCException& e)
{
cout << e.what() << endl;
bSuc = false;
}catch(DataException& e)
{
cout << e.what() << endl;
bSuc = false;
}catch(DataTypeException& e)
{
cout << e.what() << endl;
bSuc = false;
}
catch(...)
{
cout << "Unknown Error!" << endl;
bSuc = false;
}
return bSuc;
}
fengxvhui
2003-07-11
打赏
举报
回复
vlmf(散淡书生)说的对,程序退出时(正常退出和异常退出)所有已经构造的对象都会被析构
在
“file f("filename"); // 在f的构析函数自动会关闭打开的文件”
中,由于关闭文件的语句在构析函数中,所以无论何种情况发生(当然不包括掉电,呵呵),文件都会关闭。
不过我还没明白
“所以,在c++中不要使用乱七八糟的扩充,把任何资源(包括内存)封装到你的类中”
这句话。
SwordMan2001
2003-07-11
打赏
举报
回复
> glasswing(蜻蜓飞飞)
C++会自动关闭打开的文件吗(即使在异常时)?
SwordMan2001
2003-07-10
打赏
举报
回复
我用BCB6,可以通过编译,结果是
hello
in try
in try
in filter
in finally
in except
world
我没有听说过try except和try finally形式的错误捕获,可以解释一下是什么意思吗?
langhaixin
2003-07-10
打赏
举报
回复
try finally 是从delphi引入bcb里面的
这个语法是bcb的方言
glasswing
2003-07-10
打赏
举报
回复
如前面 steedhorse(晨星) 所说,std c++没有finally机制。我讲一下为什么吧 :)
finally的引入是为了解决异常安全问题;看下面的代码:
//在没有异常的美好世界中
void foo()
{
FILE *pf = fopen("filename");
// do something...
fclose(pf);
}
这一切工作的相当好,文件被打开,然后被使用,在退出的时候也被安全地关闭;但是引入异常后,这段代码就不再这么好了:
//有异常~~
void foo()
{
FILE *pf = fopen("filename");
// do something... 如果这里抛出异常,呜~,pf就不会被关闭了
fclose(pf);
}
解决的办法是:
//finally的解决办法
void foo()
{
FILE *pf = fopen("filename");
try {
// do something...可能抛出异常
}
finally {
fclose(pf); // pf总能被关闭
}
}
挺不错,但是c++里有更好的解决方案,就是被称为‘获得既初始化’的技术
//c++的方式
void foo()
{
file f("filename"); // 在f的构析函数自动会关闭打开的文件
// do something... 抛出异常,自动关闭文件
// 函数退出,自动关闭文件
}
所以,在c++中不要使用乱七八糟的扩充,把任何资源(包括内存)封装到你的类中
slimak
2003-07-10
打赏
举报
回复
__try,__except和__try,__finally是Windows提供的异常处理机制,全名叫SEH
C++提供的try-catch和上面提到的是不同的异常处理机制.
一个是语言提供的,一个是OS提供的
关于这个请参看Windows核心编程,好像后面有一章说得很清楚.
代码之诗
2003-07-10
打赏
举报
回复
__finally 是 Borland 的扩展,Borland 在帮助文件中说得很清楚了。也就是说,这种用法仅适用于 Borland 的 C++ 编译器。标准 C++ 中没有 finally 机制,因为 C++ 的设计者认为这是 destructor 的事(见 《C++ 语言的设计与演化》)。
xzygod
2003-07-10
打赏
举报
回复
_和__开头的基本上不是c/c++标准
pengzhenwanli
2003-07-10
打赏
举报
回复
没有.非标准C++比如说C++Builder中的C++编译器
wlfjck
2003-07-10
打赏
举报
回复
没有。这种机制Delphi和Java中有
fengxvhui
2003-05-27
打赏
举报
回复
编译通不过,我用Visual C++ 6
zhaohangcom
2003-05-27
打赏
举报
回复
// Example of try-except and try-finally statements
#include "stdio.h"
void main()
{
int* p = 0x00000000; // pointer to NULL
puts("hello");
try{
puts("in try");
try{
puts("in try");
*p = 13; // causes an access violation exception;
}__finally{
puts("in finally");
}
}__except(puts("in filter"), 1){
puts("in except");
}
puts("world");
}
晨星
2003-05-27
打赏
举报
回复
C++没有finally机制的。
try
excep
t
final
ly
的用法.doc
try
excep
t
final
ly
的用法.doc
C++
中
try
final
ly
关键字详解
try
-
final
ly
语句
是Microsoft对C和
C++
语言的扩展,它能使32位的目标程序在
异常
出现时,有效保证一些资源能够被及时清除,这些资源的清除任务可以包括例如内存的释放,文件的关闭,文件句柄的释放等等。
try
-
final
ly
语句
特别适合这样的情况下使用,例如一个例程(函数)中,有几个地方需要检测一个错误,并且在错误出现时,函数可能提前返回。 #include
#include
try
-
final
ly
语句
的语法与
try
-
excep
t很类似,稍有不同的是,__
final
ly
后面没有一个表达式,这是因为
try
-
final
ly
语句
的作用不是用
C++
异常
和SEH的区别
C++
异常
和SEH的区别,入门级的设计模式,大家可以参考下
c++
异常
处理机制描述
c++
异常
处理机制,包括win32,具体的实现原理
vc
异常
处理文章两篇
包括 Visual
C++
中的
异常
处理浅析 C与
C++
中的
异常
处理.pdf 两篇文章
C语言
70,006
社区成员
243,255
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章