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

Symbian 开发的命名方法

 2010-03-02 04:39:00 来源:WEB开发网   
核心提示:Symbian命名法每个美感尚存的C++ coder,第一次看到Symbian C++的程序,Symbian 开发的命名方法,第一反应是:这鬼代码怎么缩进的?接下来,所有人会有疑问应该是:函数和类上的乱七八糟的前后缀是啥意思?娃再丑也是爸妈生的,比如,TRgb、TRect之类的系统类,生成这模样虽然很无奈,但确实也是事

Symbian命名法

每个美感尚存的C++ coder,第一次看到Symbian C++的程序,第一反应是:这鬼代码怎么缩进的?接下来,所有人会有疑问应该是:函数和类上的乱七八糟的前后缀是啥意思?

娃再丑也是爸妈生的,生成这模样虽然很无奈,但确实也是事出有因。在我看来,Symbian命名法的核心出发点,就是为了更好的内存资源管理。C++的人肉内存管理模式,在给人以控制到字节的快感的同时,也带了了麻烦到每行代码的烦恼。命名法,就是Symbian设计者憋出来用来辅助管理内存资源的方式之一。

类命名

Symbian的类,通常都带着一个字母的前缀,比如C、M、T、R、H等等。

所有从CBase派生而来的子类,都以C开头,形如Cxxxx。每个正确设计的,非抽象(不可实例化)的C类,都只能在堆上分配。为了保证这一点,每一个可实例化的C类,都应该按照Symbian的二阶段构造模式。但当然,这可以有意外。比如一些派生自CCoeControl的控件对象类,会需要从 Resource文件中构造类的成员对象(而不仅仅通过二阶段中的ConstructL方式来构造),这使得它可能不适合按照二阶段构造的方式来封装。

做过.Net或者Java的人应该都明白,保持一个单一根的类型系统有什么好处,.Net在没有泛型的日子里,就是通过这个共根来实现一些基础的容器和方法。但这个好处,在C++,尤其是Symbian C++中体现的并不明显。因为C++有void *(在Symbian中华丽的转身为TAny *),有模板,可以来做一些类似的事情。更重要的,在Symbian C++中,为了节约空间,把虚表的RTTI项给精简掉了,使得Symbian C++的类丧失了dynamic_cast的能力,从而导致整个Symbian在运行期的动态识别能力,很是孱弱。

所以说,之所以要从CBase类进行派生堆上对象,很重要的一个原因,就是为了内存管理。CBase做了一件很重要的事情,就是将拷贝构造函数和赋值函数设置成了私有。这意味着,所有从CBase派生的子类,都默认被阉割了一刀,失去了拷贝构造的能力。这是为了提醒所有使用者,C对象的浅拷贝是不受欢迎的,如果你想提供该对象的拷贝功能(要深拷贝,不要浅...),往往是利用一些CloneL之类的接口来实现,保证行为的统一性。

C的类们,都涌向了堆中,栈上的活,留给了T类来完成。T类没有什么特殊的继承结构,每个T类,需要可以随意的在堆上或者栈上分配。大部分时候,它们该待的地方是栈,在栈上分配,并可以快速拷贝,一旦被析构,所以资源被释放,生不带来死不带走不留下一点残渣。因此,它们不应该包含大块的数据对象,但却可以拥有很复杂的接口,增加操作的便利性。比如,TRgb、TRect之类的系统类,就是典型的人小鬼大的代表人物。但T类不是C++的old

1 2 3  下一页

Tags:Symbian 开发 命名

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