错误处理和清理(转)

错误处理(Error Handling)和清理(Cleanup)是Symbian OS至关重要的一部分。编写每行代码,或者是读到每行代码都会因为清理而受到影响。"清理是Symbian OS编程的基础。"

Symbian OS 错误处理和清理框架不仅仅只是对内存不足(OOM-out of memory)错误有用,很多操作如读写文件、通信会话中发送和接受数据的错误也可以处理,甚至用户的输入错误也能利用清理框架来处理。只有一种错误-编程错误,清理框架无法处理。但Symbian OS提供了足够的诊断信息,便于找出错误并修正错误。

一、处理内存不足的错误

  1. 使用GUI框架提供的调试键(参考Sdk的Developer Library)
  2. 堆检查工具。通过嵌套使用_UHEAP_MARK和_UHEAP_MARKEND来检查分配的内存是否释放。注意只能用来debug
  3. 正确的销毁对象。用析构函数来销毁所拥有的对象
  4. ELeave。使用New(ELeave)代替New()。但不能分配内存时则异常退出
  5. 在任何可能异常退出的函数名尾部加上L
  6. 异常捕获机制。TRAPD(error, FunL())捕获错误
  7. 清理栈(cleanup stack)。清理栈解决如下问题:对象在堆上分配的,但是指向它的指针却是自动变量。不要把成员变量推入清理栈。
  8. 两阶段构造。c++构造函数不应该包含任何可能异常退出的函数,对可能异常退出的构造使用ConstructL().

二、用户错误

常见的一种情形是处理用户输入的错误。在一个对话框中处理"ok"按钮的函数(一个改写的CEikDialog::OkToExitL())必须

  • 从对话框控件中获得每个值
  • 验证这些值
  • 将这些值传给要执行某步操作的函数

OkToExitL()函数一个典型的编程模式就是在每个控件中,使用自动变量来包含T类型的值,或者指向一个C类型的值。

如果在OkToExitL()函数的处理过程中,在任意阶段发现非法内容,就需要

  • 给用户显示一条消息,指出问题的所在
  • 清理所有从对话框控件中提取的值,即在堆上分配的所有内容
  • 返回

详细描述请参考Developer Library中Coding Idioms for Symbian OS.pdf一文。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126351/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-126351/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值