Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

中文 Leave

From Wiki
Jump to: navigation, search
Article Metadata

文章
kcomex 在 11 Apr 2007 创建
最后由 hamishwillee 在 15 Dec 2011 编辑

在Symbian OS进行设计的的时候,C++异常的概念还并未被包含在标准C++语言规范当中,所以Symbian操作系统设计了一种轻量级的异常处理机制,称作leave(译者注:介于这个术语在国内没有统一的、标准的、合适的翻译,所以本文中不会翻译这个单词;但是在译者翻译的其他文章中,有时候经常会将leave翻译为‘退出’)。 Leave会在一个异常事件或者错误条件的结果发生的时候产生,比如内存不足或者磁盘空间已满等等情况。leave产生的错误将指向一段能够处理错误的代码段,称作TRAP harness,这个地方会将调用沿堆栈向前一步一步地返回。


尽管如此,因为任何的jump和例如分配在堆中的内存之类的本地资源,在leave之后都会变为orphaned,并由此引发内存或者资源句柄泄露。所以Symbian系统的开发者需要使用cleanup stack来时刻监测变量类型为自动类型的指针,这样的话,在leave发生的时候,cleanup stack会将入栈的所有资源清除干净。


对于标准C++构造函数和析构函数来说,这两个函数是绝对不能生成leave的。所以,Symbian系统的类通常都具有二次构造的构造函数,以此来保证不把可能leave的代码写在标准C++构造函数中。

This page was last modified on 15 December 2011, at 10:48.
99 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×