WEB开发网
开发学院手机开发Symbian 开发 Symbian 开发的命名方法 阅读

Symbian 开发的命名方法

 2010-03-02 04:39:00 来源:WEB开发网   
核心提示:plain类,它可以有继承结构,Symbian 开发的命名方法(2),比如Symbian中描述符的那一堆堆T类,就拥有复杂的继承结构,还是很值得鼓励的,,但世界是残酷的,有的类
plain类,它可以有继承结构,比如Symbian中描述符的那一堆堆T类,就拥有复杂的继承结构。

但世界是残酷的,有的类,偏偏就是投错了胎,搞得人不人,鬼不鬼。HBuf,就是此中代表。为了保持队形,维系接口,HBuf派生自TDesC,用以表示分配在堆上的Symbian描述符(就是字符串...)。但与一般T类不同,因为其占用空间动态变化,它必须在堆上分配,所以丧失了叫T的权利;另一方面,为了接口,它派生了T类,在排斥多根的C++中,它就不能够在从CBase派生了(继承的局限性,可见一斑),被断了叫C的后路。于是,就带上了H的特殊帽子,表示其在堆上分配,但不苟且于C类的屋檐下。

R类,换成通俗的描述,就是句柄类。它天生为了管理资源而存活,R类本身很简单,通常在栈上分配,可以拷贝,在这一点非常接近于T类。但与T类不同的时,R类往往带有某个堆对象的指针,指向文件之类的资源,或者是大块的堆数据对象。它析构的时候,默认是不析构这个指向的对象的,而是提供了一些类似于 Close,Release之类的接口,需要人肉手动释放。有的T类也是指向另一块堆或者栈区域的,比如TPtr类。这两者一个本质的区别在于,T类指向的对象,不是它自己分配,它只是提供一个快捷方式,并不管指向对象的死活;而R类指向的资源,往往是自己本身或者另一个同类分配的资源,R类对象指向的资源,必须从这个R类的对象构造,从这个R类的对象析构(两个对象可以不同,但类是一致的)。

在Symbian C++中,还有一些类,不涉及任何内存资源。一个就是接口类,它们以M开头,相当于.Net的Interface,是一个纯虚类。每个Symbian中的类,可以派生自若干个M类,但仅仅能从一个有内存资源的对象那里进行分配。理论上,作为一个纯虚类,应该提供一个虚的析构函数,但在Symbian C++中,这往往是不需要的。因为在一个没有RTTI的世界里,只有第一个被继承的接口才有可能成功析构所有对象。比如一个类,形如 class A : public Cxxx, public Mxxx。只有用Cxxx接口才能管理资源,对Mxxx接口进行delete,完全没有办法释放全部资源(除非Cxxx里面没有任何数据...)。而 Symbian的堆对象往往派生自CBase,所以,不可能从一个M类来析构对象,这个析构函数成不成虚,就是无关紧要的事情了。

另外一个不含任何资源的类,就是静态类了,在Symbian C++中它们没有任何前缀,是唯一不戴帽子的家伙。这个和.Net的static class一样,只包含一堆的静态方法,需要屏蔽所有构造、析构、拷贝接口(要没有这个闲工夫,不屏蔽也无所谓了...)。虽然,C++有函数,但出于对面向对象的热衷,使用这样的静态类,还是很值得鼓励的。。。

Tags:Symbian 开发 命名

编辑录入:coldstar [复制链接] [打 印]
赞助商链接