异常处理机制
来源:互联网 发布:linux双网卡配置路由 编辑:程序博客网 时间:2024/04/30 18:26
1.最初设计SymbianOS时,异常还不是C++标准的一部分.
无论实际上是否有异常被抛出,异常处理都着实增加了编译出来的代码的大小,并增加了运行时存储器的开销.
由于这些原因,标准C++的异常处理并不适宜添加到SymbianOS中.
SymbianOS强调的是简洁的操作系统和客户代码,它的实现更轻量级,只适合于小型设备的约束.
在编译基于SymbianOS的代码时,编译器被显示地设定为禁止C++异常处理,所有使用try,catch,throw关键字的地方都被标记为错误.
2.每个TRAP都对可执行文件大小,及程序执行速度有影响,每次进入和退出TRAP宏都会导致内核执行调用,并且在运行时还要分配一个结构
体来保存异常退出发生时栈的内容.
这些因素使用得TRAP在为一种代价不菲的异常退出处理方案了,所以在代码中尽量少使用TRAP.
3.SymbianOS中的异常退出/陷阱方法与C++中的抛出/捕获处理相似:它使用的捕获装置TRAP类似于try,catch;异常退出时,调用
User::Leave()等,等同于throw.
4.严格的异常处理是SymbianOS保持稳定性的核心.
清除栈是这种方法的核心,它提供了一种方式来删除在其它情况下可能不再使用的数据.
二阶段构造保证构造方法不会异常退出.
5.传统上,函数通过返回状态码表明函数执行的结果.在SymbianOS中许多API使用该方法,但它不能满足稳定的用户体验,因为:返回码可能
不能包括所有的情况;调用函数可能不知道如何处理特殊的错误.
异常退出可引起函数的立即退出,它不能被忽略.进程沿着嵌套调用链向上持续进行,直到遇到陷阱.
异常退出即leave,是由于程序因在各种情况下调用了User::Leave()等函数而产生的。
6.TRAP宏。使用TRAP捕获会可能会Leave的函数。它接收leave码。Leave终止于TRAP。总是TRAP以L结尾的函数。
7.CleanupStack清除栈。如果函数发生异常退出,在该函数中压到清理栈上的每个指针,在该函数退出前,全部都被弹出并释放。清理栈在弹出栈顶元素之前,先要回收该元素所指向的内存空间,从而充分保证程序在执行过程中不会发生内存泄露。
清除栈解决的是自动变量指针分配内存后,程序异常退出,时的删除问题。
对于对象的一长串函数调用,清除栈工作的非常好。
8.二阶段构造的目的是:在构造一个局部堆变量时,防止在构造函数中成员分配失败后,导致本对象占用的空间没有机会删除。因为在堆上给这个对象分配空间,对象中的成员占用的空间也是在堆上。
9.CBase派生类不应作为自动变量在栈上分配。
1.继承于CBase的类的构造函数放在私有段中,而在传统的c++中它放在公有段中,这样做的原因是CBase类的对象必须放在堆上,避免在栈上生成它。
2.在析构函数中不要有带异常退出的代码。
比如,若在析构函数中使用
CleanupStack::PushL();
CleanupStack::PopAndDestroy();可能会报E32User-CBase 66错误。
3.
- C#异常处理机制
- 异常处理机制
- 异常处理机制
- C++异常处理机制
- 异常处理机制
- 异常处理机制【转】
- java异常处理机制
- java异常处理机制
- c++异常处理机制
- windows 异常处理机制
- struts2异常处理机制
- OpenCV异常处理机制
- 异常处理机制
- 异常处理机制
- c++异常处理机制
- struts异常处理机制
- oracle异常处理机制
- Struts1_08_struts异常处理机制
- C# asp.net 求救
- C#.net的内部对象
- asp.net服务器组件开发给System.Web.UI.WebControls.Label增加单击事件
- 检测网络状态
- 以字符串中出现次数最多的字符的个数为权值,对一个字符串数组进行升序排序
- 异常处理机制
- 我们的好经理,好舍得花钱给买书哦,但是,是公司的钱~!
- 解决ARP攻击的方法
- RegularExpressionValidator 验证控件时的验证功能及其验证表达式介绍如下:
- 回复以前一个同事的几个问题
- 怀念与我同龄的月季花
- SQLServer Tcp/IP链接配置
- Memcmp 与 Strcmp
- 优化问题的思考