社区
C语言
帖子详情
请问C++的异常语句有try except和try finally形式吗
fengxvhui
2003-05-27 10:15:33
我学了全是try catch形式的。
如果有,能否举个例子。
...全文
1779
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机制的。
c++
try
catch
语句
_Python3中
异常
处理和
try
/
excep
t,
try
/
final
ly
的用法
本文主要介绍Python3中的
异常
处理。Python中
异常
可自动触发,也能由代码触发和拦截。文中介绍了触发和处理
异常
的
语句
,如
try
/
excep
t、
try
/
final
ly
、raise、assert、with/as等,还提及
异常
的语法
形式
、不同
异常
处理
语句
的使用及常见
异常
。
C++
及Windows
异常
处理(
try
,catch; __
try
,__
final
ly
; __
try
, __
excep
t)
本文深入解析
C++
及Windows平台的
异常
处理机制,包括
try
-catch、__
try
-__
excep
t和__
try
-__
final
ly
的使用场景与差异。探讨了资源管理、
异常
分类与处理流程,以及SEH模型下的系统与软件
异常
区别。
C++
及Windows
异常
处理(
try
,catch; __
try
,__
final
ly
; __
try
, __
excep
t)——一道笔试题引起的探究
本文深入解析了
C++
异常
处理机制,包括
try
, catch与__
try
, __
excep
t, __
final
ly
的区别及应用,通过实例演示了如何使用这些关键字进行
异常
捕获与处理。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章