×
Namespaces

Variants
Actions

中文 Leave

From Nokia Developer 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 13:48.
136 page views in the last 30 days.
×