热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SymbianOSC++学习笔记2异常退出

Ch2.异常退出(Leave)------------------------------替代:设计“异常退出”作为一种简单高效的轻量级异

Ch2. 异常退出(Leave)
------------------------------
替代:设计“异常退出”作为一种简单高效的轻量级异常处理机制。
原因:1,最初设计Symbian OS时,异常还不是C++标准的一部分;2,异常处理增加了编译出来的代码的大小,并带来了运行时存储器的开销;3,Symbian OS强调的是“简介的操作系统和客户代码”,编译器被显式地设定为禁止C++异常处理。
何时:1,调用了xxxL()而没有捕获模块;2,调用了系统函数,如User::Leave()、User::LeaveIfError()、User::LeaveIfNull();3,使用了以ELeave为参数的new操作符重载形式(参Ch2.2)。
标识:以L为后缀的函数。
工具:LeaveScan可用于检查没有正确命名的异常退出函数。
------------------------------
Ch2.2使用new(ELeave)进行基于堆的内存分配(以ELeave为参数的new操作符重载)
示例:CClanger* InitClangerL() {
 CClanger* clanger = new (ELeave) CClanger();
 CleanupStack::PushL(clanger);
 clenger->InitializeL();
 CleanupStack::Pop(clanger);//【虎.无名】PopAndDestory(clanger)将调用析构函数使其完全失效。
 return (clanger);
}
//摘自e32std.h
enum TLeave { ELeave };  inline TAny* operator new(TUint aSize, TLeave);
//e32std.inl
inline TAny* operator new(TUint aSize, TLeave) { return User::AllocL(aSize); }
------------------------------
Ch2.3 构造函数和析构函数(不允许发生异常退出)
------------------------------
Ch2.5 用宏TRAP和TRAPD捕获异常退出,后者申明了result变量,注意多重TRAP/D嵌套问题
TInt result; TRAP(result, MayLeaveL()); if(KErrNone!=result) { /*...*. }
等价于:TRAPD(result, MayLeaveL()); if(KErrNone!=result) { /*...*. }
使用TRAP式一种昂贵的处理异常退出的办法(可执行文件大小、执行速度,导致“内核执行调用”TTrap::Trap()和TTrap::UnTrap())。应当经可能减少使用TRAP的数量(方法:1)直接抛出;2)调整代码,集中处理xxxL()函数,然后统一TRAP),但每个程序中至少有一个TRAP。
一个原则:确保错误处理(异常退出、返回错误代码)的一致性(二选一)
------------------------------


推荐阅读
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了[从头学数学]中第101节关于比例的相关问题的研究和修炼过程。主要内容包括[机器小伟]和[工程师阿伟]一起研究比例的相关问题,并给出了一个求比例的函数scale的实现。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
author-avatar
唯爱WE创丶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有