关于C++Builder几个关键字的疑问
第一个就是 try 和__finally 在c++里面 异常的捕获一般都是用try和catch
不知道__finally 有什么用!!!
第二个 是关于C++的就是#pragma 这个宏用来做什么的!
问题点数:99、回复次数:15Top
1 楼langhaixin(C++如此多娇,引无数高手尽折腰!)回复于 2003-02-02 12:44:00 得分 0
没人理我!!! 自己顶!Top
2 楼favorit(九天剑舞·曾几何时,醉里挑灯看剑)回复于 2003-02-02 13:13:23 得分 10
try
……
_finally
{
…… //括号中的语句一定执行
}
Top
3 楼NowCan(城市浪人)回复于 2003-02-02 16:45:40 得分 0
是不是叫结构化异常处理?
第二个还是看帮助吧,用法太多了。Top
4 楼Maxwell(不可知)回复于 2003-02-02 17:25:12 得分 30
__finally是borland自己的关键字,无论try有没有异常抛出来,__finally都会被执行到,可以把要释放的资源之类的放在里面,这样不管是否出错,资源都能被释放,而且只用一份代码。Top
5 楼peilulu(露露)回复于 2003-02-02 17:34:43 得分 30
这两个东东是boeland为了加强复杂工程的健壮性而添加的,同意maxwell关于__finally的说明。它使程序员可以减轻处理内存泄露的压力。第二个东东要和其他关键字配合起来才有用,具体的太多了,看看help吧Top
6 楼sailcloud(凌云工作室)回复于 2003-02-02 19:17:54 得分 0
同意露露的观点!Top
7 楼lz_pkboy(lz-pkboy)回复于 2003-02-02 23:43:27 得分 0
同意凌云工作室的观点!Top
8 楼deavilness(俠盜裸奔漢)回复于 2003-02-03 14:54:31 得分 10
偶觉得这个 __finally 有些多余,看一下下面的结构:
TMyClass *p ;
try {
p = new TMyClass ;
...
} catch(...) {
...
}
delete p ;
在这里,无论 catch 是有执行还是没有执行,delete p 还是一个样的执行,这个好象跟 __finally 的作用一样。除非是在 try 内部有些错误导致程序无法向下执行,但如果真有这种错误,__finally 似乎也不能幸免。
所以偶觉得 __finally 有些多余,不知道俺的想发是否正确,请各位大侠来指点指点。Top
9 楼ilikeff8(迷茫)回复于 2003-02-03 15:33:06 得分 19
楼上,你这样new一定会触发警告:p可能未create
__finally 怎么会多余呢?比如你的:
TMyClass *p = new TMyClass ;
try {
...
} catch(...) {
...
}
delete p ;
别的不说,你可以在__finally里再抛出这个异常Top
10 楼deavilness(俠盜裸奔漢)回复于 2003-02-03 17:11:53 得分 0
楼上 ilikeff8(迷茫) 注意哦,我的 p 可是在 try 之前定义,try 里面初始化的,而不可能出现 p 未定义的警告,除非定义指针都会抛出异常。Top
11 楼deavilness(俠盜裸奔漢)回复于 2003-02-03 17:12:29 得分 0
补充:delete 一个空指针并不会引起错误。Top
12 楼ilikeff8(迷茫)回复于 2003-02-03 17:20:41 得分 0
to deavilness(夜魔)
bcb我忘了,不过在delphi里如果在try中create,无论位置处于哪,编译器它楞是要发出警告来Top
13 楼deavilness(俠盜裸奔漢)回复于 2003-02-03 18:00:30 得分 0
To ilikeff8(迷茫) :
这我很迷惑了,在 Delphi 里面,如果Create 不放在 try 里面,Create 过程抛出异常怎么办?要处理异常就一定要被编译器警告吗?Top
14 楼ilikeff8(迷茫)回复于 2003-02-03 19:42:33 得分 0
to deavilness(夜魔)
create运行时一般不会触发异常,除非你内存耗尽,不过我从没遇到过这种情况,如果连create一个实例都无法分配,那在这之前我想你的windows找都无法动弹,发出错误"系统资源严重不足"了吧
在try里create编辑器假定在之前如果有异常发生如:
try
{
i=1/0;
Memo=new TMemo(nil);
...
}
Memo就不会被create了,所以它会警告"可能"不管你在new前有没语句,因为它无法确定在new前有语句的情况下会不会有异常,我是这么认为的
而且如果放在try里有一个问题,如果前有异常很可能没create就free了
try
i=1/0;
Memo=new TMemo(nil);
...
}
Memo.free;
很可能会有这种疏忽发生Top
15 楼deavilness(俠盜裸奔漢)回复于 2003-02-03 21:40:28 得分 0
我补充一点:C++ 里面,delete 没有 new 的指针不是一个错误。Top




