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。
一个原则:确保错误处理(异常退出、返回错误代码)的一致性(二选一)。
------------------------------
分享到:
相关推荐
SYMBIAN OS C++ 高效编程教程
Symbian OS C++ 手机应用开发(第一卷)续3
Symbian OS C++ For Mobile Phones 开发宝典
《Symbian OS C++ 高效编程》 源码 《Symbian OS Explained》 源码
Symbian OS C++ for Mobile Phones(Volume1-3全)
刚才传了个Symbian OS C++手机应用开发是part01 《Symbian OS C++手机应用开发》 Richard Harrison 著 周良忠 译
Symbian OS C++ for Mobile Phones volume 2 中文版(Symbian OS C++ 手机应用开发)
刚才传了个Symbian OS C++手机应用开发是part01 《Symbian OS C++手机应用开发》 Richard Harrison 著 周良忠 译
Symbian OS C++ for Volume 2.rar book pdf src code
Symbian OS C++ for Windows C++ programmers
Symbian.OS.C++手机应用开发(第三卷)PDF,真真的PDF上传文件,要的下载,文件共8个,请一一下载,下载后解压就可以了。 学习Symbian OS 的超经典作品。
北航Symbian OS C++实践培训讲义 北航Symbian OS C++实践培训讲义
《Symbian OS C++ 手机应用开发》源码(1-2卷)
全书共分为21章,分别介绍了Symbian OS中的类命名约定、异常退出、清除栈、两段构造、描述符、良好的描述符风格、动态的数组与缓冲区、使用活动对象的事件驱动多任务、活动对象、Symbian OS的线程与进程、客户/...
Symbian OS C++ - a first look under the hood By John Pagonis.
Symbian OS C++ for Mobile Phones
symbian os c++ 应用程序开发教程 完整版 pdf symbian os c++ 应用程序开发教程 完整版 pdf symbian os c++ 应用程序开发教程 完整版 pdf symbian os c++ 应用程序开发教程 完整版 pdf
OS中的类命名约定 11.1 基本类型 11.2 T类 21.3 C类 31.4 R类 51.5 M类 61.6 静态类 91.7 使用者注意事项 91.8 小结 9第2章 异常退出(leave):Symbian OS的异常 102.1 异常退出函数 102.2 ...
Symbian OS C++手机应用开发.pdf