今天写下函数的命名约定和内存管理学习体会
这里涉及到异常处理和资源管理。
简单介绍
(1)严格的异常处理是SYMBIAN OS 的保持稳定性的核心。它紧密的继承在资源管理中,同时也影响着命名约定。应用程序中不发生内存泄露很重要。因此必须确保在异常发生时清楚存储在堆上的任何应用程序资源。清除栈是这种方法的核心。它提供了一种在其他情况下不在使用的数据。
(2)当然对与SYMBAIN OS 里的构造对象也很重要。简单的对象SYMBIAN OS 提供了一个重载的版本,而在设计比较复杂的对象时候就采用一种两阶段构造的方法。 字串4
下面详细说下异常处理;
(1)普通的异常处理:
在SYMBIAN OS 中有个重要的命名规则:对于任何有可能异常退出的函数,必须后面加上L,这会使得人们明白该函数有LEAVE 的可能,需要采取必要的措施来预防,SYMBIAN 开发者必须遵循这个命名约定。
以下几点是你面队L 函数必须注意的问题
A 如果该函数调用了L 函数,那么该函数也要加上L 。
B 如果一个函数调用了NEW(LEAVE),那么该函数要加上L。
C 如果要实现一个有框架提供的函数,必须事先知道该框架函数是 否是一个L 函数
D 如果你定义了一个框架函数要让其他开发者实现,那么你必须考虑是否定义 成L函数
在合适的地方来调用TRAP()/TRAPD(),不需要经常使用它。
如果有框架的时候你不必要使用TRAP()/TRAPD()。因为框架本身已经使用了一个了。
(2)清除栈:CLEANUP栈
它的适用情况:它使用在在堆里分配了对象,但指向这些对象的指针是保存在栈里,在传统的C 中,当删除了指针,堆里对象不会被删除,当发生异常的时候就更别说了。CLEANUP栈用来保护对象的指针,当发生LEAVE 时候就会通过清除栈里的指针来删除堆里的对象。
下面详细说下构造对象; 字串6
(1)简单对象的构造:
简单对象的构造时候,在SYMBIAN OS 里会提供一个摸板。
(2)复杂对象的构造,两阶段构造详细介绍:
它适用的情况是: CLEANUP栈保存的是指向堆对象的指针,但我们必须有机会来将该指针压入该栈,如果由于遵循传统的程序设计习惯而导致某写压栈操作不能执行,那么清除栈也就失去了作用,针对此SYMBIAN OS 提出了两阶段构造。它是SYMBIAN OS 编程风格的一个标志。
既然这样我们不在构造函数中申请资源,而在对象创建后显示的调用一个函数,在该函数中申请资源,着就是两阶段构造的基本思想。
字串1
两阶段构造函数的实现方法如下:
我们定义一个函数ConstructL(),称它为两阶段构造函数,该函数负责申请那些需要在初始化申请资源,也可以负责初始化成员变量,而第一步构造函数是指缺省的构造函数,它负责拷贝初始化。
下面说两个资源清理的规则:
(1)如果存在异常退出的风险,并且在其他位置上没有对已经分配堆对象的引用,则指向该对象的具有本地作用域的指针必须推入清除栈。
(2)绝对不要将实例数据推入清除栈。
(3)构造函数和析构函数绝对不能有异常退出,并且析构函数不能采用完全 构造
(4)删除成员指针总是在从新分配前将其初始化为0。
下面看SYMBIAN OS 构造方法
在SYMBIAN OS 里有四种构造方法用来构造已经分配的堆的新实例:NEW(),
NEW(ELEAVE),NEWL(),NEWLC()。
下面是一些使用这些方法的指导原则:
A NEW 几乎从来不使用,一个常见的例外就是在构造应用程序的实例时候,因为这时候清除栈不存在。
B NEW (ELEAVE):在构造简单类的分配堆的实例时候使用该方法:例如T类(通常分配栈)或并不拥有任何已经分配堆的书记的C类。注意除了C类的其他类的堆分配可能需要清除栈的高级使用。
C NEWL()在构造复合类是已经分配的堆的实例,并且将该实例直接赋给另一个类的成员指针,或者在删除对象前不存在任何异常退出的危险这时候就使用这种方法。(不需要清除栈)
D NEWLC()构造一个复合类的已经分配堆的对象实例,将该实例直接赋给本地作用域指针,同时在删除该指针前要调用异常退出函数这时必须使用这种方法。(必须使用清除栈)
字串3
下面讨论下清除栈的高级使用:
在程序中还有一些常规的清除栈无法解决的情况,下面介绍两种情况:
(1)非CBASE 派生类的已经分配的堆对象
(2)R类 字串1
![我要研发网[www.51dev.com]](/templets/images/toplogo.gif)
