CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

关于C++Builder几个关键字的疑问

楼主langhaixin(C++如此多娇,引无数高手尽折腰!)2003-02-02 12:14:12 在 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

相关问题

  • 使用c++中的“asm”关键字?有个疑问
  • C#的关键字
  • C++Builder 6.0是否支持C99的关键字_Bool???
  • New关键字与virtual和override关键字的疑问。
  • C++ Builder中没有和VC中的__leave对应的关键字?很不爽啊
  • C/C++中static关键字的使用
  • c++ builder5关键字扩展的意义
  • 解释一下?关键字 oracle,java ,C#
  • system是标准C++的关键字吗?
  • C#中new关键字得用法

关键词

  • c++
  • 执行
  • 语句
  • 指针
  • 关键字
  • tmyclass
  • 错误
  • try
  • 异常
  • 抛出

得分解答快速导航

  • 帖主:langhaixin
  • favorit
  • Maxwell
  • peilulu
  • deavilness
  • ilikeff8

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo